"""Interface mode runner."""

import os
from pathlib import Path

from dotenv import load_dotenv

from common.context import ReviewMode
from interface.core.orchestrator import ReviewOrchestrator
from common.git_utils import get_staged_files, is_git_repository
from interface.cli import build_interface_panel, _expand_paths, INTERFACE_SECTION_ORDER
from common.render import render_review_panel
from common.ui import console, finish_progress, start_progress, update_status


def run(input_context: dict | None = None) -> int:
    """Execute interface mode analysis."""
    # .env 파일 로드 (보안 모드와 동일하게)
    load_dotenv()
    
    try:
        # Config 로드 (환경변수에서 직접 읽기, 보안 모드와 동일)
        base_url = os.getenv("GAR_LLM_BASE_URL") or os.getenv("GAR_LLM_ENDPOINT")
        model = os.getenv("GAR_MODEL") or os.getenv("GAR_LLM_MODEL")
        
        # base_url이 없으면 보안 모드처럼 나중에 에러 처리
        # ReviewOrchestrator에서 base_url이 None이면 에러 발생하므로 그때 처리
        
        # 파일 목록 결정 (input_context 우선)
        if input_context:
            file_list = input_context.get("selected_paths", [])
            file_list = [Path(p) for p in file_list]
            if not file_list:
                handle = input_context.get("_ui_handle") if input_context else start_progress("인터페이스 분석 모드", total_files=0)
                update_status(handle, "결과 파싱/렌더링 중")
                finish_progress(handle)
                panel = render_review_panel(
                    mode="interface",
                    file_summary="no files",
                    section_order=INTERFACE_SECTION_ORDER,
                    sections={key: [] for key, _ in INTERFACE_SECTION_ORDER},
                    title="Interface Review",
                    notice="리뷰 대상 파일이 없습니다.",
                )
                console.print(panel)
                return 1
        else:
            file_list = []
            if is_git_repository():
                staged_files = get_staged_files(python_only=True)
                if staged_files:
                    file_list = staged_files
                else:
                    file_list, _ = _expand_paths(["."])
            else:
                file_list, _ = _expand_paths(["."])
        
        if not file_list:
            handle = start_progress("인터페이스 분석 모드", total_files=0)
            update_status(handle, "결과 파싱/렌더링 중")
            finish_progress(handle)
            panel = render_review_panel(
                mode="interface",
                file_summary="no files",
                section_order=INTERFACE_SECTION_ORDER,
                sections={key: [] for key, _ in INTERFACE_SECTION_ORDER},
                title="Interface Review",
                notice="리뷰 대상 파일이 없습니다.",
            )
            console.print(panel)
            return 1
        
        # progress handle 초기화 (파일 목록 결정 후)
        handle = input_context.get("_ui_handle") if input_context else start_progress("인터페이스 분석 모드", total_files=len(file_list))
        if input_context:
            input_context["_ui_handle"] = handle
        
        # 리뷰 실행
        if os.getenv("GAR_DEBUG") == "1":
            console.print(f"[dim]모델: {model or '자동 선택'}[/dim]\n")

        update_status(handle, "LLM 생성 중")
        orchestrator = ReviewOrchestrator(base_url=base_url)
        ctx = orchestrator.build_context(
            mode=ReviewMode.INTERFACE,
            files=file_list,
            model=model or "default",
            temperature=float(os.getenv("GAR_TEMPERATURE", "0.2")),
            max_output_tokens=int(os.getenv("GAR_MAX_OUTPUT_TOKENS", "2048")),
            max_retries=int(os.getenv("GAR_MAX_RETRIES", "3")),
            language=os.getenv("GAR_LANGUAGE", "Korean"),
            quiet=False,
            input_context=input_context,
        )
        
        report = orchestrator.run(ctx)
        
        # 결과 출력
        update_status(handle, "결과 파싱/렌더링 중")
        panel = build_interface_panel(report)
        finish_progress(handle)
        console.print(panel)
        
        # 인터페이스 모드에서는 정상 완료 시 항상 exit code 0 반환
        # (문제 발견은 정상적인 리뷰 결과이므로 오류로 처리하지 않음)
        return 0
        
    except KeyboardInterrupt:
        finish_progress(handle)
        console.print("[yellow]인터페이스 분석 모드 중단.[/yellow]")
        return 1
    except ValueError as e:
        # base_url이 None인 경우 등 설정 오류
        finish_progress(handle)
        if "base_url" in str(e).lower() or "llm" in str(e).lower():
            console.print("[red]❌ LLM 서버 주소가 설정되지 않았습니다.[/red]")
            console.print("[dim]💡 GAR_LLM_BASE_URL 환경변수를 설정하거나 'gar init'을 실행해주세요.[/dim]")
        else:
            console.print(f"[red]❌ 설정 오류: {e}[/red]")
        return 1
    except Exception as e:
        finish_progress(handle)
        console.print(
            f"\n[bold red]인터페이스 분석 모드 실행 중 예상치 못한 오류 발생:[/bold red] [red]{e}[/red]",
            stderr=True,
        )
        import traceback
        traceback.print_exc()
        return 1