from datetime import datetime, timezone

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session

from app.api.deps import get_current_user
from app.core.config import get_settings
from app.core.database import get_db
from app.models import Profile, User
from app.schemas import ProfileIn, ProfileOut, UserOut
from app.schemas.cv_apply import SettingsOut

router = APIRouter(prefix="/profile", tags=["profile"])


@router.get("", response_model=ProfileOut)
def get_profile(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
    if not user.profile:
        profile = Profile(user_id=user.id)
        db.add(profile)
        db.commit()
        db.refresh(profile)
        return profile
    return user.profile


@router.put("", response_model=ProfileOut)
def update_profile(
    payload: ProfileIn,
    user: User = Depends(get_current_user),
    db: Session = Depends(get_db),
):
    profile = user.profile
    if not profile:
        profile = Profile(user_id=user.id)
        db.add(profile)
        db.flush()
    data = payload.model_dump(exclude_unset=True)
    for k, v in data.items():
        setattr(profile, k, v)
    profile.updated_at = datetime.now(timezone.utc)
    db.commit()
    db.refresh(profile)
    return profile


@router.patch("/me/settings", response_model=UserOut)
def update_user_settings(
    apply_auto_submit: bool | None = None,
    user: User = Depends(get_current_user),
    db: Session = Depends(get_db),
):
    if apply_auto_submit is not None:
        user.apply_auto_submit = apply_auto_submit
        db.commit()
        db.refresh(user)
    return user


@router.get("/app-settings", response_model=SettingsOut)
def app_settings(_: User = Depends(get_current_user)):
    from app.services import ai_cv

    s = get_settings()
    status = ai_cv.llm_status()
    return SettingsOut(
        llm_provider=s.llm_provider,
        openai_model=s.openai_model,
        ollama_model=s.ollama_model,
        ollama_base_url=s.ollama_base_url,
        ollama_ok=bool(status.get("ollama_ok")),
        cursor_enabled=bool(s.cursor_api_enabled and s.cursor_bridge_token),
        scrape_interval_minutes=s.scrape_interval_minutes,
        apply_auto_submit_global=s.apply_auto_submit,
        has_openai_key=bool(s.openai_api_key),
        single_process_ui=True,
    )
