#!/usr/bin/env python3
"""Dry-run verification: re-match lead-69s against updated catalog.

No writes, no billing — pure read-only comparison.
"""

import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src"))

from agent_samochodowy.matcher.engine import match
from agent_samochodowy.matcher.index import CatalogIndex
from agent_samochodowy.models import PartQuery

DB_PATH = str(Path(__file__).resolve().parent.parent / "data" / "catalog.db")

# All lead-69 entries from dgred analysis (dgred_id, name, brand, model, category, oe_numbers, raw_text_summary)
# These are reconstructed from the dgred data + pipeline logs
LEAD_69_QUERIES = [
    # === LIVE PERIOD (from 2026-06-29) ===
    {"id": 8445, "name": "Adrian Utrata", "brand": "DAF", "model": "LF", "category": "katalizator",
     "oe": [], "raw": "szukam katalizator DAF LF"},
    {"id": 8446, "name": "Dami8092", "brand": None, "model": None, "category": "poduszka",
     "oe": [], "raw": "poszukuję poduszka do naczepy"},
    {"id": 8448, "name": "Dawid Kolondra", "brand": None, "model": None, "category": "drzwi",
     "oe": [], "raw": "szukam słupki drzwi"},
    {"id": 8449, "name": "Mateusz Mat", "brand": "MAN", "model": "TGX", "category": "osuszacz",
     "oe": [], "raw": "szukam osuszacz grzybek MAN TGX 470 2020"},
    {"id": 8450, "name": "Marcin Safian", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "szukam koło napędowe zębate ciągnik"},
    {"id": 8451, "name": "Kuba Filipczyk", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "szukam stacja klimatyzacji"},
    {"id": 8452, "name": "Paweł Wojciechowski", "brand": "SCANIA", "model": "R410", "category": "alternator",
     "oe": [], "raw": "szukam alternator Scania R410 2017"},
    {"id": 8453, "name": "Skup Ciężarówek", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "skup ciężarówek cała Polska", "is_skup": True},
    {"id": 8454, "name": "Adrian Gac", "brand": None, "model": "Schmitz", "category": "poduszka",
     "oe": [], "raw": "szukam poduszka do naczepy Schmitz"},
    {"id": 8455, "name": "Wojciech Wojas", "brand": "AUDI", "model": "A4", "category": None,
     "oe": ["8W0419502E", "8W0927287C"], "raw": "szukam silnik nastawczy kolumny kierowniczej Audi A4 B9 Quattro 8W0419502E"},
    {"id": 8456, "name": "Skup Pojazdów", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "skup pojazdów ciężarowych oś SAF scharzmueller", "is_skup": True},

    # === SHADOW PERIOD (pre 2026-06-29, but same catalog) ===
    {"id": 8442, "name": "Marek Cyburt", "brand": "MERCEDES", "model": "ACTROS", "category": "przewód",
     "oe": ["9605014684"], "raw": "szukam wąż przewód chłodnicy Mercedes Actros MP4 9605014684"},
    {"id": 8440, "name": "Krzysztof Leporowski", "brand": "VOLVO", "model": "FH4", "category": "szyba",
     "oe": [], "raw": "szukam szyba przednia Volvo FH4 2017"},
    {"id": 8439, "name": "Mariusz Piekłowski", "brand": "SCANIA", "model": None, "category": "przewód",
     "oe": [], "raw": "szukam przewód gumowy od retarderu Scania"},
    {"id": 8429, "name": "Mateusz Ko", "brand": None, "model": None, "category": "osuszacz",
     "oe": [], "raw": "szukam osuszacz kompresor"},
    {"id": 8380, "name": "Olek", "brand": "IVECO", "model": "STRALIS", "category": "rozrusznik",
     "oe": ["DE59302"], "raw": "szukam rozrusznik Iveco Stralis DE59302"},
    {"id": 8378, "name": "Kamil Rga", "brand": "MERCEDES", "model": "ACTROS", "category": "przewód",
     "oe": [], "raw": "szukam przewód wody Mercedes Actros"},
    {"id": 8389, "name": "Mariusz Ko", "brand": "VOLVO", "model": "FH5", "category": "turbo",
     "oe": ["24875893"], "raw": "szukam turbosprężarka turbocompound Volvo FH5 I-SAVE D13K500 24875893"},
    {"id": 8382, "name": "Sebastian Dymek", "brand": "VOLVO", "model": None, "category": "filtr paliwa",
     "oe": [], "raw": "szukam filtry paliwa Volvo"},
    {"id": 8391, "name": "Hubert Kroma", "brand": "RENAULT", "model": "MASTER", "category": "koło pasowe",
     "oe": [], "raw": "szukam koło pasowe Renault Master"},
    {"id": 8398, "name": "Bartosz Mazur", "brand": None, "model": "MASTER", "category": "łożysko",
     "oe": [], "raw": "szukam łożysko przednie koło master movano"},
    {"id": 8390, "name": "Radoslaw", "brand": "MERCEDES", "model": "SPRINTER", "category": "klocki hamulcowe",
     "oe": [], "raw": "szukam klocki hamulcowe Mercedes Sprinter w904 2004"},
    {"id": 8371, "name": "Szymon Olszewski", "brand": None, "model": None, "category": "pompa wtryskowa",
     "oe": ["0460420209"], "raw": "szukam pompa wtryskowa 0460420209"},
    {"id": 8364, "name": "Marek Senenko", "brand": "VOLVO", "model": "FH13", "category": "drzwi",
     "oe": [], "raw": "szukam przedłużenie drzwi Volvo FH13 2013"},
    {"id": 8444, "name": "Części TIR", "brand": "MAN", "model": "TGX", "category": None,
     "oe": [], "raw": "poszukuję części MAN TGX TGS"},
    {"id": 8443, "name": "Damian Matuszewski", "brand": None, "model": None, "category": "piasta",
     "oe": [], "raw": "szukam piasta i łożysko naczepa"},
    {"id": 8432, "name": "Patryk Żaba", "brand": None, "model": None, "category": "piasta",
     "oe": [], "raw": "szukam piasta w naczepie"},
    {"id": 8431, "name": "Skup Ciężarówek 2", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "skup wywrotki rama hakowce zabudowa", "is_skup": True},
    {"id": 8430, "name": "Magdalena Piątek", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "ktoś ma namiary"},
    {"id": 8416, "name": "Marta Ma", "brand": "MERCEDES", "model": None, "category": None,
     "oe": [], "raw": "szukam Mercedes 2010"},
    {"id": 8415, "name": "Sylwester Gajewski", "brand": None, "model": "WIELTON", "category": None,
     "oe": [], "raw": "szukam naczepa Wielton"},
    {"id": 8407, "name": "Adam Kobiela", "brand": None, "model": None, "category": None,
     "oe": ["600493837"], "raw": "szukam opona 600493837"},
    {"id": 8399, "name": "Grzegorz Napierski", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "szukam zbiornik wyrównawczy"},
    {"id": 8379, "name": "Skup Pojazdów 2", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "firanki plandeki boczne SAF", "is_skup": True},
    {"id": 8381, "name": "Sebastian Grzelak", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "szukam opona do naczepy"},
]

# Leads that WERE matched (67/68) — regression check
LEAD_OK_QUERIES = [
    {"id": "shadow_67", "name": "Lead 67 (shadow)", "brand": "VOLVO", "model": "FH", "category": "sprężarka",
     "oe": [], "raw": "szukam sprężarka Volvo FH", "expected_min_conf": 0.50},
    {"id": "live_68_1", "name": "Lead 68 #1 (live)", "brand": None, "model": None, "category": None,
     "oe": [], "raw": "szukam część ciężarówka", "expected_min_conf": 0.0},
    {"id": "live_68_2", "name": "Lead 68 #2 (live)", "brand": "MAN", "model": "TGX", "category": "sprężarka",
     "oe": [], "raw": "szukam sprężarka MAN TGX", "expected_min_conf": 0.50},
]


def status_label(confidence: float) -> str:
    if confidence >= 0.85:
        return "67 Dopasowano"
    elif confidence >= 0.50:
        return "68 Do weryfikacji"
    else:
        return "69 Brak dopasowania"


def main() -> None:
    index = CatalogIndex(DB_PATH)
    print(f"Catalog loaded: {index.count()} offers")
    print()

    # --- Lead 69 verification ---
    print("=" * 90)
    print("  LEAD-69 RE-MATCHING (before=all were 69/Brak dopasowania)")
    print("=" * 90)

    counts = {"67 Dopasowano": 0, "68 Do weryfikacji": 0, "69 Brak dopasowania": 0, "SKUP (filtered)": 0}
    improved = []

    for lead in LEAD_69_QUERIES:
        # Check skup filter
        if lead.get("is_skup"):
            counts["SKUP (filtered)"] += 1
            print(f"  [{lead['id']}] {lead['name']:25s} → SKUP (would be filtered by prefilter)")
            continue

        query = PartQuery(
            is_part_request=True,
            raw_text=lead["raw"],
            brand=lead.get("brand"),
            model=lead.get("model"),
            category=lead.get("category"),
            oe_numbers=lead.get("oe", []),
        )

        result = match(query, index)
        status = status_label(result.confidence)
        counts[status] += 1

        marker = ""
        if status != "69 Brak dopasowania":
            marker = " ★ IMPROVED"
            improved.append(lead)

        top_offer = result.offers[0].title[:50] if result.offers else "-"
        print(f"  [{lead['id']}] {lead['name']:25s} → {status:25s} conf={result.confidence:.2f} "
              f"method={result.method:10s} offer={top_offer}{marker}")

    print()
    print("=" * 90)
    print(f"  SUMMARY: 67={counts['67 Dopasowano']} / 68={counts['68 Do weryfikacji']} / "
          f"69={counts['69 Brak dopasowania']} / skup={counts['SKUP (filtered)']}")
    print(f"  Improved (would no longer be 69): {len(improved)}")
    print("=" * 90)

    # --- Regression check ---
    print()
    print("=" * 90)
    print("  REGRESSION CHECK (existing 67/68 leads)")
    print("=" * 90)

    regressions = 0
    for lead in LEAD_OK_QUERIES:
        query = PartQuery(
            is_part_request=True,
            raw_text=lead["raw"],
            brand=lead.get("brand"),
            model=lead.get("model"),
            category=lead.get("category"),
            oe_numbers=lead.get("oe", []),
        )
        result = match(query, index)
        status = status_label(result.confidence)
        ok = "✓" if result.confidence >= lead.get("expected_min_conf", 0.50) else "✗ REGRESSION"
        if "REGRESSION" in ok:
            regressions += 1
        print(f"  [{lead['id']}] {lead['name']:25s} → {status:25s} conf={result.confidence:.2f} {ok}")

    if regressions:
        print(f"\n  ⚠ {regressions} REGRESSIONS DETECTED")
    else:
        print("\n  ✓ No regressions")

    index.close()


if __name__ == "__main__":
    main()
