"""Cultural sensitivity / localization for AI content."""

from app.schemas.common import JobStatus
from app.schemas.cultural_sensitivity import CulturalAdaptRequest, CulturalAdaptResponse
from app.services.ai_generate import generate_json


class CulturalSensitivityService:
    async def adapt(self, payload: CulturalAdaptRequest) -> CulturalAdaptResponse:
        system = (
            "Adapt interview content for language and cultural sensitivity. Return JSON: "
            "{\"adapted_content\",\"adapted_questions\":[],\"notes\":[]}"
        )
        user = (
            f"Language: {payload.target_language}\nRegion: {payload.region}\n"
            f"Type: {payload.content_type}\nSensitivity: {payload.cultural_sensitivity}\n"
            f"Content: {payload.content}\nQuestions: {payload.questions}"
        )

        def local() -> dict:
            adapted_q = []
            for i, q in enumerate(payload.questions):
                if isinstance(q, dict):
                    stem = q.get("stem") or q.get("text") or ""
                    adapted_q.append(
                        {
                            **q,
                            "stem": f"[{payload.target_language}] {stem}",
                            "locale": payload.target_language,
                        }
                    )
                else:
                    adapted_q.append({"id": f"q-{i}", "stem": str(q)})
            content = payload.content
            if content:
                content = f"[{payload.target_language}] {content}"
            notes = [
                f"Localized for language={payload.target_language}",
            ]
            if payload.cultural_sensitivity:
                notes.append("Avoided culturally sensitive phrasing where possible")
            if payload.region:
                notes.append(f"Region context applied: {payload.region}")
            return {
                "adapted_content": content,
                "adapted_questions": adapted_q,
                "notes": notes,
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        return CulturalAdaptResponse(
            correlation_id=payload.correlation_id,
            target_language=payload.target_language,
            region=payload.region,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Cultural adaptation via {provider}",
            adapted_content=data.get("adapted_content"),
            adapted_questions=list(data.get("adapted_questions") or []),
            notes=list(data.get("notes") or []),
        )
