#!/usr/bin/env python3
"""CLI-обёртка над app.scrapers.tecdoc_local: make/model/year(+engine)+ключевое
слово -> список категорий запчастей, реально существующих для этой машины
в TecDoc (без похода в Telegram-бота/веб, без квоты/LLM).

Запуск на mac mini из ~/Services/avtero (venv avtero-venv), .env уже задаёт
TECDOC_DB_* через os.environ в момент импорта модуля.

    python3 tecdoc_lookup.py categories --make Toyota --model Camry --year 2015 --query тормоз
"""
from __future__ import annotations

import argparse
import asyncio
import json
import os
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parent  # ~/Services/avtero when deployed there
sys.path.insert(0, str(ROOT))


def _load_env(env_path: Path) -> None:
    if not env_path.exists():
        return
    for line in env_path.read_text().splitlines():
        line = line.strip()
        if not line or line.startswith("#") or "=" not in line:
            continue
        k, v = line.split("=", 1)
        os.environ.setdefault(k.strip(), v.strip())


_load_env(ROOT / ".env")

from app.scrapers import tecdoc_local  # noqa: E402


async def cmd_categories(args: argparse.Namespace) -> dict:
    return await tecdoc_local.categories_for_vehicle(
        make=args.make, model=args.model, year=args.year,
        engine=args.engine, query=args.query,
    ) or {"category_count": 0, "categories": [], "note": "не найдено (нет ktype для этой машины или совпадений по слову)"}


async def cmd_validate(args: argparse.Namespace) -> dict:
    ok = await tecdoc_local.validate_oe(args.oem, make=args.make)
    return {"oem": args.oem, "valid": ok}


async def cmd_cross(args: argparse.Namespace) -> dict:
    return await tecdoc_local.cross_oe(args.oem) or {"oem": args.oem, "found": False}


def main() -> None:
    p = argparse.ArgumentParser(description=__doc__)
    sub = p.add_subparsers(dest="cmd", required=True)

    pc = sub.add_parser("categories", help="категории запчастей для машины (опц. фильтр по слову)")
    pc.add_argument("--make", required=True)
    pc.add_argument("--model", required=True)
    pc.add_argument("--year", type=int, default=None)
    pc.add_argument("--engine", default=None)
    pc.add_argument("--query", default=None, help="напр. 'тормоз', 'фильтр'")
    pc.set_defaults(func=cmd_categories)

    pv = sub.add_parser("validate", help="проверить, что OEM существует в каталоге")
    pv.add_argument("--oem", required=True)
    pv.add_argument("--make", default=None)
    pv.set_defaults(func=cmd_validate)

    px = sub.add_parser("cross", help="аналоги (aftermarket + OE<->OE) по OEM")
    px.add_argument("--oem", required=True)
    px.set_defaults(func=cmd_cross)

    args = p.parse_args()
    result = asyncio.run(args.func(args))
    print(json.dumps(result, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
