"""Bias detection service."""

from app.schemas.bias_detection import (
    BiasDetectionRequest,
    BiasDetectionResponse,
    BiasFlagItem,
)
from app.schemas.common import JobStatus
from app.services.ai_generate import generate_json


class BiasDetectionService:
    async def analyze(self, payload: BiasDetectionRequest) -> BiasDetectionResponse:
        system = (
            "Detect biased or exclusionary language. Return JSON: "
            "{\"passed\":bool,\"risk_score\":0-1,\"flags\":[{\"category\",\"severity\","
            "\"excerpt\",\"description\",\"recommendation\"}],\"rewritten_suggestions\":[]}"
        )
        user = (
            f"content_type={payload.content_type}\ncontent={payload.content}\n"
            f"questions={payload.questions}\nevaluation={payload.evaluation_text}\n"
            f"jd={payload.job_description}"
        )

        def local() -> dict:
            text = " ".join(
                filter(
                    None,
                    [
                        payload.content,
                        payload.evaluation_text,
                        payload.job_description,
                        str(payload.questions),
                    ],
                )
            ).lower()
            risky = ["young blood", "native speaker", "guys only", "cultural fit only"]
            flags = []
            for phrase in risky:
                if phrase in text:
                    flags.append(
                        {
                            "category": "exclusionary_language",
                            "severity": "medium",
                            "excerpt": phrase,
                            "description": f"Potentially biased phrase detected: {phrase}",
                            "recommendation": "Rewrite to inclusive, job-relevant criteria",
                        }
                    )
            return {
                "passed": len(flags) == 0,
                "risk_score": 0.2 if flags else 0.05,
                "flags": flags,
                "rewritten_suggestions": [
                    "Use skill- and outcome-based criteria instead of demographic proxies"
                ]
                if flags
                else [],
            }

        data, stub, provider = await generate_json(
            system=system, user=user, local_factory=local
        )
        flags = [
            BiasFlagItem(
                category=str(f.get("category", "general")),
                severity=str(f.get("severity", "low")),
                excerpt=f.get("excerpt"),
                description=str(f.get("description", "")),
                recommendation=f.get("recommendation"),
            )
            for f in (data.get("flags") or [])
            if isinstance(f, dict)
        ]
        return BiasDetectionResponse(
            correlation_id=payload.correlation_id,
            content_type=payload.content_type,
            status=JobStatus.SUCCEEDED,
            stub=stub,
            message=f"Bias detection via {provider}",
            passed=data.get("passed"),
            risk_score=data.get("risk_score"),
            flags=flags,
            rewritten_suggestions=list(data.get("rewritten_suggestions") or []),
        )
