
from fastapi import APIRouter, Form, HTTPException
from pydantic import BaseModel
from typing import Optional
from app.models import interview_module

from app.core.config import ZOOM_MEETING_ID, ZOOM_MEETING_PASSWORD
import datetime

# Import Calendar Utility
try:
    from app.utils.google_calendar import create_event
except ImportError:
    create_event = None

# Modified prefix for Sales project
router = APIRouter(
    prefix="/goalskill-sales/api/interview",
    tags=["Interview Check"]
)

class EvaluationResponse(BaseModel):
    status: str
    message: str
    id: int

class ScheduleResponse(BaseModel):
    status: str
    message: str
    zoom_link: Optional[str] = None
    zoom_password: Optional[str] = None
    calendar_url: Optional[str] = None
    meeting_time: Optional[str] = None

@router.post("/eval", response_model=EvaluationResponse)
async def save_evaluation(
    session_id: str = Form(...),
    rating: int = Form(...),
    advice: Optional[str] = Form(None),
    interviewer_name: Optional[str] = Form(None),
    interview_type: Optional[str] = Form(None) 
):
    try:
        new_id = interview_module.insert_evaluation(
            session_id=session_id,
            rating=rating,
            advice=advice,
            interviewer_name=interviewer_name,
            interview_type=interview_type
        )
        
        return EvaluationResponse(
            status="success",
            message="Evaluation saved successfully.",
            id=new_id
        )

    except Exception as e:
        print(f"[Interview Router Error] {e}")
        raise HTTPException(status_code=500, detail=str(e))

class ProfileResponse(BaseModel):
    status: str
    user_name: str

@router.post("/profile", response_model=ProfileResponse)
async def get_user_profile(
    session_id: str = Form(...)
):
    try:
        user_name = interview_module.get_username_from_profile(session_id)
        if not user_name:
            user_name = "Guest"
            
        return ProfileResponse(
            status="success",
            user_name=user_name
        )
    except Exception as e:
        print(f"[Profile Fetch Error] {e}")
        return ProfileResponse(status="error", user_name="Guest")

@router.post("/schedule", response_model=ScheduleResponse)
async def schedule_meeting(
    session_id: str = Form(...),
    user_name: Optional[str] = Form(None) # Make optional, will fetch from DB if None or default
):
    try:
        # 0. Fetch Real User Name
        real_user_name = interview_module.get_username_from_profile(session_id)
        if real_user_name and real_user_name != "Guest":
            user_name = real_user_name
        elif not user_name:
            user_name = "Guest"

        # 1. Generate Zoom Link
        zoom_link = None
        zoom_password = None
        if ZOOM_MEETING_ID and ZOOM_MEETING_PASSWORD:
            zoom_link = f"https://zoom.us/j/{ZOOM_MEETING_ID}?pwd={ZOOM_MEETING_PASSWORD}"
            zoom_password = ZOOM_MEETING_PASSWORD
            
        # 2. Create Calendar Event (7 days later, 14:00)
        calendar_url = None
        meeting_time_str = None
        
        if create_event and zoom_link:
            target_date = datetime.datetime.now() + datetime.timedelta(days=7)
            target_date = target_date.replace(hour=14, minute=0, second=0, microsecond=0)
            meeting_time_str = target_date.isoformat()
            
            clean_zoom_link = zoom_link.replace(" ", "")
            
            calendar_url = create_event(
                summary=f"面談: {user_name}",
                description=f"候補者名: {user_name}\nZoomミーティング: {clean_zoom_link}\nパスコード: {zoom_password}",
                start_time_str=meeting_time_str,
                location="Zoom"
            )
            
        return ScheduleResponse(
            status="success",
            message="Meeting scheduled.",
            zoom_link=zoom_link,
            zoom_password=zoom_password,
            calendar_url=calendar_url,
            meeting_time=meeting_time_str
        )

    except Exception as e:
        print(f"[Interview Schedule Error] {e}")
        raise HTTPException(status_code=500, detail=str(e))
