"""KYC API skeleton.""" from __future__ import annotations from fastapi import APIRouter, Depends, Request from app.api.advisor_auth_adapter import get_advisor_auth, require_advisor_permission from app.model.advisor_schemas import KycChatRequest, KycSessionCreate from app.api.advisor_auth_adapter import AdvisorAuthContext from app.service.kyc_session_service import KycSessionService from app.api.advisor_http import advisor_ok as _advisor_ok router = APIRouter(prefix="/api/advisor-agent/kyc", tags=["advisor-agent-kyc"]) AUTH_CONTEXT_DEP = Depends(get_advisor_auth) KYC_CREATE_DEP = Depends(require_advisor_permission("kyc:create")) KYC_READ_DEP = Depends(require_advisor_permission("kyc:chat")) KYC_CHAT_DEP = Depends(require_advisor_permission("kyc:chat")) KYC_COMPLETE_DEP = Depends(require_advisor_permission("kyc:complete")) kyc_session_service = KycSessionService() @router.get("/ping") def ping(request: Request, auth: AdvisorAuthContext = AUTH_CONTEXT_DEP): return _advisor_ok(request, {"module": "kyc", "status": "ready"}) @router.post("/sessions") def create_kyc_session( request: Request, payload: KycSessionCreate, auth: AdvisorAuthContext = KYC_CREATE_DEP, ): result = kyc_session_service.create_session( payload, auth=auth, trace_id=request.state.trace_id, ) return _advisor_ok(request, result.model_dump(mode="json")) @router.get("/sessions/{session_id}") def get_kyc_session( session_id: str, request: Request, auth: AdvisorAuthContext = KYC_READ_DEP, ): result = kyc_session_service.get_session(session_id, auth=auth) return _advisor_ok(request, result.model_dump(mode="json")) @router.post("/sessions/{session_id}/chat") def chat_kyc_session( session_id: str, request: Request, payload: KycChatRequest, auth: AdvisorAuthContext = KYC_CHAT_DEP, ): result = kyc_session_service.chat_session( session_id, payload, auth=auth, trace_id=request.state.trace_id, ) return _advisor_ok(request, result.model_dump(mode="json")) @router.post("/sessions/{session_id}/complete") def complete_kyc_session( session_id: str, request: Request, auth: AdvisorAuthContext = KYC_COMPLETE_DEP, ): result = kyc_session_service.complete_session( session_id, auth=auth, trace_id=request.state.trace_id, ) return _advisor_ok(request, result.model_dump(mode="json"))