from fastapi import APIRouter, Cookie, Response, Header
from pydantic import BaseModel
from typing import Optional

from app.models.supervisor_db_module import (
    authenticate_supervisor, 
    get_supervisor_by_session, 
    get_mapped_learners, 
    get_learner_daily_notes, 
    update_boss_comment_for_learner
)

router = APIRouter()

class SupervisorLoginRequest(BaseModel):
    supervisor_id: str
    password: str

class BossCommentRequest(BaseModel):
    learner_session_id: str
    date: str
    comment: str

@router.post("/supervisor/login")
async def supervisor_login(request: SupervisorLoginRequest, response: Response):
    """상사 인증"""
    result = authenticate_supervisor(request.supervisor_id, request.password)
    if result["success"]:
        # 쿠키에도 세션 저장
        response.set_cookie(key="sup_session", value=result["session_id"], httponly=True)
    return result

@router.get("/supervisor/auth/check")
async def check_supervisor_auth(auth_token: Optional[str] = Header(None, alias="Authorization"), sup_session: Optional[str] = Cookie(None)):
    """현재 로그인된 상사 토큰 검증"""
    token = sup_session
    if auth_token and auth_token.startswith("Bearer "):
        token = auth_token.split("Bearer ")[1]
        
    if not token:
        return {"logged_in": False}
        
    user = get_supervisor_by_session(token)
    if user:
        return {"logged_in": True, "supervisor_id": user["supervisor_id"]}
    return {"logged_in": False}

@router.get("/supervisor/learners")
async def get_learners(auth_token: Optional[str] = Header(None, alias="Authorization"), sup_session: Optional[str] = Cookie(None)):
    """상사에게 매핑된 학습자 리스트 반환"""
    token = sup_session
    if auth_token and auth_token.startswith("Bearer "):
        token = auth_token.split("Bearer ")[1]
        
    user = get_supervisor_by_session(token)
    if not user:
        return {"status": "error", "message": "Unauthorized"}
        
    learners = get_mapped_learners(user["supervisor_id"])
    return {"status": "success", "data": learners}

@router.get("/supervisor/reports/{learner_session_id}")
async def get_learner_reports(learner_session_id: str, auth_token: Optional[str] = Header(None, alias="Authorization"), sup_session: Optional[str] = Cookie(None)):
    """특정 학습자의 일지(daily_note) 조회"""
    token = sup_session
    if auth_token and auth_token.startswith("Bearer "):
        token = auth_token.split("Bearer ")[1]
        
    user = get_supervisor_by_session(token)
    if not user:
        return {"status": "error", "message": "Unauthorized"}
        
    notes = get_learner_daily_notes(user["supervisor_id"], learner_session_id)
    if notes is None:
        return {"status": "error", "message": "You don't have permission for this learner."}
        
    return {"status": "success", "data": notes}

@router.post("/supervisor/boss-comment")
async def submit_boss_comment(req: BossCommentRequest, auth_token: Optional[str] = Header(None, alias="Authorization"), sup_session: Optional[str] = Cookie(None)):
    """상사 코멘트 저장"""
    token = sup_session
    if auth_token and auth_token.startswith("Bearer "):
        token = auth_token.split("Bearer ")[1]
        
    user = get_supervisor_by_session(token)
    if not user:
        return {"status": "error", "message": "Unauthorized"}
        
    res = update_boss_comment_for_learner(user["supervisor_id"], req.learner_session_id, req.date, req.comment)
    return res
