from __future__ import annotations

from typing import Any, Dict, Optional

from channel.url_canonical import slugify_segment


def taxonomy_targets_for_type_key(type_key: Optional[str]) -> Dict[str, Any]:
    key = str(type_key or "").strip().lower()
    if not key:
        return {}

    label_l1: Optional[str] = None
    label_l2: Optional[str] = None

    if _matches_any(key, "wall-cabinets.basic-wall", "wall.basic", "wall.basic-glass"):
        label_l1, label_l2 = "Wall Cabinets", "Basic Wall"
    elif _matches_any(key, "wall-cabinets.bridge-wall", "wall.bridge"):
        label_l1, label_l2 = "Wall Cabinets", "Bridge Wall"
    elif _matches_any(key, "wall-cabinets.corner-wall", "wall.corner"):
        label_l1, label_l2 = "Wall Cabinets", "Corner Wall"
    elif _matches_any(key, "wall-cabinets.special-wall", "wall.special"):
        label_l1, label_l2 = "Wall Cabinets", "Special Wall"
    elif _matches_any(key, "base-cabinets.basic-base", "base.basic"):
        label_l1, label_l2 = "Base Cabinets", "Basic Base"
    elif _matches_any(key, "base-cabinets.sink-base", "base.sink"):
        label_l1, label_l2 = "Base Cabinets", "Sink Base"
    elif _matches_any(key, "base-cabinets.drawer-base", "base.drawer"):
        label_l1, label_l2 = "Base Cabinets", "Drawer Base"
    elif _matches_any(key, "base-cabinets.corner-base", "base.corner"):
        label_l1, label_l2 = "Base Cabinets", "Corner Base"
    elif _matches_any(key, "base-cabinets.special-base", "base.special"):
        label_l1, label_l2 = "Base Cabinets", "Special Base"
    elif _matches_any(key, "tall-cabinets.oven-tall", "base.tall.single-oven"):
        label_l1, label_l2 = "Tall Cabinets", "Oven Tall"
    elif _matches_any(key, "tall-cabinets.pantry-tall") or key.startswith("base.tall."):
        label_l1, label_l2 = "Tall Cabinets", "Pantry Tall"
    elif _matches_any(key, "panels-and-fillers", "misc.panels"):
        label_l1, label_l2 = "Panels and Fillers", None
    elif _matches_any(key, "mouldings", "misc.mouldings"):
        label_l1, label_l2 = "Mouldings", None
    elif _matches_any(key, "accessories", "misc.accessories"):
        label_l1, label_l2 = "Accessories", None

    if not label_l1:
        return {}

    shopping_l1 = slugify_segment(label_l1)
    out: Dict[str, Any] = {
        "category_path_labels": ["Kitchen Cabinets", label_l1, *([label_l2] if label_l2 else [])],
        "category_path_slug": "/".join(
            ["kitchen-cabinets", shopping_l1, *([slugify_segment(label_l2)] if label_l2 else [])]
        ),
        "shopping_l1": shopping_l1,
        "shopping_collection_attribute_code": "shopping_collection",
    }
    if label_l2:
        out["shopping_l2"] = f"{shopping_l1}/{slugify_segment(label_l2)}"
    return out


def _matches_any(key: str, *prefixes: str) -> bool:
    return any(key == prefix or key.startswith(f"{prefix}.") or key.startswith(f"{prefix}-") for prefix in prefixes)
