#!/usr/bin/env python3
"""
Skrypt do przypisania istniejących kategorii do głównych grup.
Uruchom po migracji 030_add_category_hierarchy.sql
"""

import os
import sys

# Add parent directory to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from database import SessionLocal, Category

# Mapowanie kategorii do głównych grup
# Klucz: slug głównej grupy, wartość: lista slugów podkategorii
CATEGORY_MAPPING = {
    'uslugi': [
        'it-technologie',
        'it-telekomunikacja',
        'marketing',
        'uslugi-prawne',
        'ksiegowosc-finanse',
        'uslugi-biznesowe',
        'bezpieczenstwo-ochrona',
        'media',
    ],
    'budownictwo-grupa': [
        'budownictwo',
        'hvac-instalacje',
        'architektura-projektowanie',
        'energia-oze',
        'nieruchomosci',
    ],
    'handel': [
        'handel-hurtownie',
        'motoryzacja',
        'hotelarstwo',
    ],
    'produkcja-grupa': [
        'produkcja',
        'rolnictwo',
        'inne',
    ],
}


def main():
    db = SessionLocal()
    try:
        # Znajdź lub utwórz główne kategorie
        main_categories = {}

        for main_slug, subcategory_slugs in CATEGORY_MAPPING.items():
            main_cat = db.query(Category).filter(Category.slug == main_slug).first()

            if not main_cat:
                print(f"[!] Główna kategoria '{main_slug}' nie istnieje - tworzę...")
                # Utwórz główną kategorię
                name_map = {
                    'uslugi': 'Usługi',
                    'budownictwo-grupa': 'Budownictwo',
                    'handel': 'Handel',
                    'produkcja-grupa': 'Produkcja',
                }
                main_cat = Category(
                    name=name_map.get(main_slug, main_slug),
                    slug=main_slug,
                    description=f'Główna kategoria: {name_map.get(main_slug, main_slug)}',
                    parent_id=None,
                    display_order=list(CATEGORY_MAPPING.keys()).index(main_slug) + 1
                )
                db.add(main_cat)
                db.flush()  # Get ID

            main_categories[main_slug] = main_cat
            print(f"[✓] Główna kategoria: {main_cat.name} (ID: {main_cat.id})")

            # Przypisz podkategorie
            for sub_slug in subcategory_slugs:
                sub_cat = db.query(Category).filter(Category.slug == sub_slug).first()
                if sub_cat:
                    if sub_cat.parent_id != main_cat.id:
                        sub_cat.parent_id = main_cat.id
                        print(f"    → {sub_cat.name} przypisana do {main_cat.name}")
                    else:
                        print(f"    ✓ {sub_cat.name} już przypisana")
                else:
                    print(f"    [!] Kategoria '{sub_slug}' nie istnieje - pomijam")

        db.commit()
        print("\n[✓] Przypisanie kategorii zakończone!")

        # Pokaż podsumowanie
        print("\n=== PODSUMOWANIE ===")
        for main_slug, main_cat in main_categories.items():
            subcats = db.query(Category).filter(Category.parent_id == main_cat.id).all()
            print(f"\n{main_cat.name} ({len(subcats)} podkategorii):")
            for sub in subcats:
                company_count = len(sub.companies) if sub.companies else 0
                print(f"  - {sub.name}: {company_count} firm")

    except Exception as e:
        print(f"[!] Błąd: {e}")
        db.rollback()
        raise
    finally:
        db.close()


if __name__ == '__main__':
    main()
