"""Canonical vehicle type codes for filtering and reporting."""

VEHICLE_TYPE_CHOICES: list[dict[str, str]] = [
    {"code": "two_wheeler", "label": "Two Wheeler"},
    {"code": "private_car", "label": "Private Car"},
    {"code": "commercial_pcv", "label": "Commercial PCV"},
    {"code": "commercial_gcv", "label": "Commercial GCV"},
    {"code": "auto_rickshaw", "label": "Auto Rickshaw"},
    {"code": "tractor", "label": "Tractor"},
    {"code": "misc", "label": "Miscellaneous"},
]

VEHICLE_TYPE_LABELS = {item["code"]: item["label"] for item in VEHICLE_TYPE_CHOICES}


def vehicle_type_label(code: str | None) -> str | None:
    if not code:
        return None
    return VEHICLE_TYPE_LABELS.get(code, code.replace("_", " ").title())


def normalize_vehicle_type(value: str | None) -> str | None:
    """Map free-text / policy wording to a canonical vehicle type code."""
    if not value:
        return None
    lower = value.lower().replace("-", " ")

    if any(k in lower for k in ("two wheeler", "twowheeler", "2 wheeler", "motorcycle", "scooter")):
        if "commercial" not in lower:
            return "two_wheeler"
    if any(k in lower for k in ("private car", "private car", "standalone motor own damage cover - private car")):
        return "private_car"
    if "private car" in lower or ("motor" in lower and "private" in lower and "car" in lower):
        return "private_car"
    if any(k in lower for k in ("goods carrying", "gcv", "commercial goods", "goods car")):
        return "commercial_gcv"
    if any(k in lower for k in ("passenger carrying", "pcv", "passenger car")):
        return "commercial_pcv"
    if any(k in lower for k in ("auto rickshaw", "3 wheeler", "three wheeler", "rickshaw")):
        return "auto_rickshaw"
    if "tractor" in lower:
        return "tractor"
    if "commercial vehicle" in lower or "miscellaneous car" in lower:
        return "misc"
    return None


def infer_vehicle_type(text: str) -> str | None:
    """Infer vehicle type from full policy PDF text."""
    return normalize_vehicle_type(text)
