from pathlib import Path
from pydantic_settings import BaseSettings

# 프로젝트 루트: backend/ 의 부모 디렉토리
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent.parent


class Settings(BaseSettings):
    app_name: str = "TheRoad Scene Lab"
    secret_key: str = "dev-secret-key"
    database_url: str = "postgresql://theroad:theroad_dev_2026@localhost:5432/theroad"
    projects_dir: str = str(PROJECT_ROOT / "projects")
    session_ttl_hours: int = 24
    default_admin_username: str = "admin"
    default_admin_password: str = "admin123"
    default_creator_username: str = "creator"
    default_creator_password: str = "creator123"
    openai_api_key: str = ""
    openai_model: str = "gpt-5.4"
    gemini_api_key: str = ""
    gemini_text_model: str = "gemini-3.1-pro-preview"
    gemini_flash_model: str = "gemini-3-flash-preview"
    gemini_lite_model: str = "gemini-3.1-flash-lite-preview"
    gemini_image_model: str = "gemini-3.1-flash-image-preview"
    fal_key: str = ""
    max_concurrent_image_gen: int = 15       # 이미지 동시 생성 수 (Gemini API 기준)
    max_concurrent_variation: int = 10      # 변형 추천/생성 동시 수
    max_concurrent_entity_detail: int = 10  # 요소 상세 추출 동시 수
    scene_variation_count: int = 2          # 씬당 T2I 변형 수
    scene_detail_llm: str = "gpt"          # 씬 상세 분석 LLM: "gemini" or "gpt"
    scene_segment_context_chars: int = 100  # 씬 세그먼트 앞뒤 컨텍스트 글자수

    # LLM 토큰 설정 — 1M context 모델 기준
    llm_max_output_tokens: int = 65536    # 최대 출력 토큰 (GPT/Gemini 공통)

    # API 타임아웃 (초) — 용도별 설정
    llm_timeout_text: int = 600       # 텍스트 분석 (시나리오 전문 분석 등, 최대 10분)
    llm_timeout_image_gen: int = 180  # 이미지 생성 (Gemini T2I/i2i, 3분)
    llm_timeout_validation: int = 120 # 이미지 검증 (GPT Vision, 2분)
    llm_max_retries: int = 3          # 타임아웃/서버에러 시 재시도 횟수 (0=재시도 없음, 총 시도 = 1+N)

    class Config:
        env_file = ".env"
        extra = "ignore"  # .env에 추가 키가 있어도 무시


settings = Settings()
