"""
routers/reports_router.py
----------------------------
Fetch a previously generated screening report (as HTML), and submit
feedback about a session or the tool in general.
"""

from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.responses import HTMLResponse
from sqlalchemy.orm import Session

from .. import db_models, schemas
from ..auth import get_current_user
from ..database import get_db

router = APIRouter(tags=["reports"])


@router.get("/reports/{session_uuid}", response_class=HTMLResponse)
def get_report(
    session_uuid: str, db: Session = Depends(get_db),
    current_user: db_models.User = Depends(get_current_user),
):
    db_session = (
        db.query(db_models.ChatSession)
        .filter(db_models.ChatSession.session_uuid == session_uuid)
        .first()
    )
    if not db_session or db_session.user_id != current_user.id:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Session not found.")
    if not db_session.report:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="No report available yet — the screening session may be incomplete.",
        )
    return HTMLResponse(content=db_session.report.report_html)


@router.post("/feedback", status_code=status.HTTP_201_CREATED)
def submit_feedback(
    payload: schemas.FeedbackCreate, db: Session = Depends(get_db),
    current_user: db_models.User = Depends(get_current_user),
):
    session_id = None
    if payload.session_uuid:
        db_session = (
            db.query(db_models.ChatSession)
            .filter(db_models.ChatSession.session_uuid == payload.session_uuid)
            .first()
        )
        if db_session and db_session.user_id == current_user.id:
            session_id = db_session.id

    feedback = db_models.Feedback(
        user_id=current_user.id, session_id=session_id,
        rating=payload.rating, comment=payload.comment,
    )
    db.add(feedback)
    db.commit()
    return {"detail": "Thank you for your feedback."}
