"""specify integration scaffold command handler."""
from __future__ import annotations

from enum import Enum
from pathlib import Path

import typer

from .._console import console
from ..integration_scaffold import supported_integration_scaffold_types
from ._commands import integration_app


INTEGRATION_SCAFFOLD_TYPES = supported_integration_scaffold_types()
_IntegrationScaffoldType = Enum(
    "_IntegrationScaffoldType",
    {name: name for name in INTEGRATION_SCAFFOLD_TYPES},
    type=str,
)


@integration_app.command("scaffold")
def integration_scaffold(
    key: str = typer.Argument(help="Integration key in lowercase kebab-case, e.g. my-agent"),
    integration_type: _IntegrationScaffoldType = typer.Option(
        _IntegrationScaffoldType.markdown,
        "--type",
        case_sensitive=False,
        help=f"Scaffold type: {', '.join(INTEGRATION_SCAFFOLD_TYPES)}",
    ),
):
    """Create a minimal built-in integration package and test skeleton."""
    from ..integration_scaffold import scaffold_integration

    # scaffold targets the Spec Kit *source* repo layout (_is_spec_kit_repo_root),
    # not a .specify/ member project, so SPECIFY_INIT_DIR does not apply here.
    project_root = Path.cwd()
    try:
        result = scaffold_integration(project_root, key, integration_type.value)
    except (OSError, ValueError) as exc:
        # OSError covers filesystem failures during mkdir()/write_text()
        # (permission denied, read-only checkout, a path component that is a
        # file, ...) as well as FileExistsError; surface them as a clean CLI
        # error instead of a traceback.
        console.print(f"[red]Error:[/red] {exc}")
        raise typer.Exit(1)

    console.print(f"[green]Created integration scaffold:[/green] {result.key}")
    console.print(f"  {result.integration_file.relative_to(project_root).as_posix()}")
    console.print(f"  {result.test_file.relative_to(project_root).as_posix()}")
    console.print()
    console.print("[bold]Next steps:[/bold]")
    for index, step in enumerate(result.next_steps, start=1):
        console.print(f"{index}. {step}")
