"""Gap detection logic — compares found documents against compliance matrix."""

from __future__ import annotations

import uuid
from typing import Optional

from .compliance_matrix import COMPLIANCE_MATRIX, RequiredDocument


def generate_gap_analysis(
    classification_counts: dict[str, int],
    company_profiles: Optional[list[str]] = None,
) -> dict:
    """Analyze gaps between found documents and required compliance matrix.

    Args:
        classification_counts: e.g. {"VVT": 2, "TOM": 1, "DSE": 0}
        company_profiles: list of applicable profiles.
            Default: ["universal", "data_processor", "ai_user"]

    Returns dict with compliance_score, gaps list, classification_breakdown.
    """
    if company_profiles is None:
        company_profiles = ["universal", "data_processor", "ai_user"]

    applicable = [
        req for req in COMPLIANCE_MATRIX
        if req.applies_to in company_profiles
    ]

    gaps = []
    covered = 0

    for req in applicable:
        count = classification_counts.get(req.category, 0)
        if count == 0:
            gaps.append({
                "id": str(uuid.uuid4()),
                "category": req.category,
                "description": req.description,
                "severity": req.severity,
                "regulation": req.regulation,
                "requiredAction": f"{req.category} erstellen und dokumentieren",
                "relatedStepId": None,
            })
        else:
            covered += 1

    total_required = len(applicable)
    compliance_score = (covered / total_required * 100) if total_required > 0 else 0

    return {
        "compliance_score": round(compliance_score, 1),
        "total_required": total_required,
        "covered": covered,
        "gaps": gaps,
        "gap_summary": {
            "critical": sum(1 for g in gaps if g["severity"] == "CRITICAL"),
            "high": sum(1 for g in gaps if g["severity"] == "HIGH"),
            "medium": sum(1 for g in gaps if g["severity"] == "MEDIUM"),
        },
    }
