"""Сплошной прогон релевантности по РЕАЛЬНОЙ БД: ~20 специальностей × все свежие
вакансии/заказы. Авто-флаг кросс-доменных/мусорных проходов (то, что реально
увидит юзер в боте и на сайте — общий движок)."""
import sqlite3
import sys

sys.path.insert(0, ".")
from bot.vacancy_filters import (
    detect_vacancy_employment,
    is_freelance_source,
    matches_vacancy_relevance,
    profile_domains,
)

con = sqlite3.connect("file:vakhunter.db?mode=ro", uri=True)
con.row_factory = sqlite3.Row
ROWS = [dict(r) for r in con.execute(
    "SELECT title,description,company,location,source,skills,employment_type "
    "FROM vacancies WHERE created_at>datetime('now','-21 days')").fetchall()]

# специальность, навыки (как пишет AI), ожидаемый домен
PROFILES = [
    ("Официант", "работа в ресторане, обслуживание гостей", "services"),
    ("Повар", "кухня, приготовление блюд", "services"),
    ("Бармен", "коктейли, работа за баром", "services"),
    ("Продавец-консультант", "торговый зал, выкладка, кассовая дисциплина", "trade_sales"),
    ("Кассир", "работа с кассой, обслуживание покупателей", "trade_sales"),
    ("Водитель", "категория B, личный автомобиль", "services"),
    ("Курьер", "доставка заказов, подработка", "services"),
    ("Сварщик", "аргонная сварка, металл", "manual_labor"),
    ("Электрик", "монтаж проводки, электрооборудование", "manual_labor"),
    ("Грузчик", "погрузка-разгрузка", "manual_labor"),
    ("Автомеханик", "ремонт двигателя, автосервис", "manual_labor"),
    ("Парикмахер", "стрижки, окрашивание", "services"),
    ("Массажист", "лечебный массаж", "services"),
    ("Медсестра", "уколы, капельницы, стационар", "services"),
    ("Бухгалтер", "1С, первичка, отчётность", "legal_finance"),
    ("Юрист", "договоры, судебная практика", "legal_finance"),
    ("Учитель математики", "преподавание, подготовка к ЕГЭ", "education"),
    ("Репетитор английского", "английский, разговорный", "education"),
    ("Менеджер по продажам", "холодные звонки, CRM", "office"),
    ("HR-менеджер", "подбор персонала, собеседования", "office"),
    ("Охранник", "охрана объекта, сутки через двое", "services"),
    ("Уборщица", "уборка помещений", "services"),
    ("Python разработчик", "telegram бот, aiogram, API", "it"),
    ("1С программист", "доработка конфигураций 1С", "it"),
    ("Дизайнер", "figma, веб-дизайн, макеты", "office"),
    ("Копирайтер", "тексты, SEO, контент", "office"),
    ("Фотограф", "съёмка, обработка фото", "office"),
]

# Разрешённые смежности доменов (не считаем ошибкой)
ALLOWED = {
    ("manual_labor", "services"), ("services", "manual_labor"),
    ("trade_sales", "services"), ("services", "trade_sales"),
    ("trade_sales", "office"), ("office", "trade_sales"),
    ("legal_finance", "office"), ("office", "legal_finance"),
    ("office", "it"), ("it", "office"),
    ("services", "office"), ("office", "services"),
    ("education", "office"), ("office", "education"),
    ("legal_finance", "it"), ("it", "legal_finance"),
}


def vac_domain(v):
    d = profile_domains(v.get("title", ""), v.get("description", ""))
    return d[0] if d else "general"


flags = []
summary = []
for sp, sk, pdom in PROFILES:
    passes = [v for v in ROWS if matches_vacancy_relevance(sp, sk, v)]
    suspicious = []
    for v in passes:
        vd = vac_domain(v)
        if vd == pdom or vd == "general" or pdom == "general":
            continue
        if (pdom, vd) in ALLOWED:
            continue
        kind = "🛒заказ" if is_freelance_source(v["source"]) else "💼вак"
        suspicious.append(f"      ⚠ [{vd}] {kind} {v['source']}: {v['title'][:52]}")
    summary.append(f"{sp:24} pass={len(passes):3}  подозрит={len(suspicious)}")
    if suspicious:
        flags.append(f"  {sp} ({pdom}):")
        flags.extend(suspicious[:6])

print(f"Вакансий/заказов в окне: {len(ROWS)}; специальностей: {len(PROFILES)}\n")
print("\n".join(summary))
print(f"\n{'='*60}")
if flags:
    print(f"🟥 ПОДОЗРИТЕЛЬНЫЕ КРОСС-ДОМЕННЫЕ ПРОХОДЫ: {sum(1 for f in flags if f.startswith('    '))}")
    print("\n".join(flags))
else:
    print("✅ КРОСС-ДОМЕННОГО МУСОРА НЕ НАЙДЕНО")
