from fastapi import APIRouter, Depends, Response
from sqlmodel import Session, select
from app.db import get_session
from app.models import Questionnaire, User
from app.schemas import QuestionnaireCreate, AIPrompt
from app.security import get_current_user, require_roles, WRITE_ROLES
from app.services.ai import generate_answer
from app.services.exports import questionnaire_docx
router=APIRouter(prefix="/questionnaires", tags=["questionnaires"])
@router.get("")
def list_questionnaires(user:User=Depends(get_current_user), session:Session=Depends(get_session)):
    return session.exec(select(Questionnaire).where(Questionnaire.tenant_id==user.tenant_id)).all()
@router.post("")
def create_questionnaire(data:QuestionnaireCreate, user:User=Depends(require_roles(*WRITE_ROLES)), session:Session=Depends(get_session)):
    q=Questionnaire(tenant_id=user.tenant_id, **data.model_dump()); session.add(q); session.commit(); session.refresh(q); return q
@router.post("/ai-answer")
async def ai_answer(data:AIPrompt, user:User=Depends(get_current_user), session:Session=Depends(get_session)):
    return await generate_answer(session,user,data.prompt,data.related_control)
@router.get("/ai-answer/{log_id}/export.docx")
def export_answer(log_id:int, user:User=Depends(get_current_user), session:Session=Depends(get_session)):
    from app.models import AILog
    log=session.get(AILog, log_id)
    if not log or log.tenant_id!=user.tenant_id: return Response(status_code=404)
    return Response(questionnaire_docx(log.response), media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", headers={"Content-Disposition":"attachment; filename=questionnaire-answer.docx"})
