#!/usr/bin/env python3
"""
Korekta danych 3 firm w NordaBiz
================================

Zmiany:
1. HILLOB (ID: 35) - zmiana kategorii z "budownictwo/maszyny budowlane" na "maszyny szwalnicze"
2. Hotel SPA Wieniawa (ID: 36) - zmiana lokalizacji z "Lebork" na "Rekowo Gorne"
3. Wejherplast (ID: 74) - zmiana profilu z "tworzywa sztuczne" na "drukarnia poligraficzna"

Data utworzenia: 2025-12-29
Autor: Claude Code

WAZNE: Uruchom na produkcji jako:
    cd /var/www/nordabiznes
    sudo -u www-data /var/www/nordabiznes/venv/bin/python3 fix_company_data_corrections.py --dry-run
    sudo -u www-data /var/www/nordabiznes/venv/bin/python3 fix_company_data_corrections.py
"""

import sys
from datetime import datetime
from sqlalchemy import text
from database import SessionLocal, Company, Category


def fix_company_data_corrections(dry_run: bool = False):
    """
    Wykonaj korekty danych dla 3 firm.

    Args:
        dry_run: Jesli True, tylko pokazuje zmiany bez zapisywania
    """
    db = SessionLocal()

    try:
        print("=" * 70)
        print("KOREKTA DANYCH FIRM - NordaBiz")
        print("=" * 70)
        print(f"Data: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        print(f"Tryb: {'DRY RUN (bez zmian)' if dry_run else 'PRODUKCJA (zmiany zapisane)'}")
        print("=" * 70)

        # Pobierz kategorie (bedziemy potrzebowac ID dla Produkcja i Handel)
        categories = {cat.slug: cat for cat in db.query(Category).all()}
        print(f"\nDostepne kategorie: {[c.name for c in categories.values()]}")

        # ============================================================
        # 1. HILLOB (ID: 35) - zmiana branzy
        # ============================================================
        print("\n" + "-" * 50)
        print("1. HILLOB (ID: 35)")
        print("-" * 50)

        hillob = db.query(Company).filter_by(id=35).first()
        if not hillob:
            hillob = db.query(Company).filter(Company.name.ilike('%hillob%')).first()

        if hillob:
            print(f"   Nazwa: {hillob.name}")
            print(f"   Slug: {hillob.slug}")
            print(f"   Aktualna kategoria ID: {hillob.category_id}")
            print(f"   Aktualna kategoria: {hillob.category.name if hillob.category else 'brak'}")
            print(f"   Aktualny industry_sector: {hillob.industry_sector}")
            print(f"   Aktualny opis krotki: {hillob.description_short}")

            # Zmiana na kategorie Handel (dystrybucja maszyn szwalniczych)
            handel_category = categories.get('handel')

            print("\n   ZMIANY:")
            print(f"   - category_id: {hillob.category_id} -> {handel_category.id if handel_category else 'brak'}")
            print(f"   - industry_sector: '{hillob.industry_sector}' -> 'Maszyny szwalnicze - dystrybucja i serwis'")
            print(f"   - description_short: '{hillob.description_short}' -> 'Dystrybucja i serwis profesjonalnych maszyn szwalniczych'")

            if not dry_run:
                hillob.category_id = handel_category.id if handel_category else hillob.category_id
                hillob.industry_sector = 'Maszyny szwalnicze - dystrybucja i serwis'
                hillob.description_short = 'Dystrybucja i serwis profesjonalnych maszyn szwalniczych'
                hillob.last_updated = datetime.now()
                hillob.data_source = 'Manual correction (2025-12-29)'
                print("   [OK] Zmiany zapisane")
        else:
            print("   [BLAD] Firma HILLOB nie znaleziona!")

        # ============================================================
        # 2. Hotel SPA Wieniawa (ID: 36) - zmiana lokalizacji
        # ============================================================
        print("\n" + "-" * 50)
        print("2. HOTEL SPA WIENIAWA (ID: 36)")
        print("-" * 50)

        wieniawa = db.query(Company).filter_by(id=36).first()
        if not wieniawa:
            wieniawa = db.query(Company).filter(Company.name.ilike('%wieniawa%')).first()

        if wieniawa:
            print(f"   Nazwa: {wieniawa.name}")
            print(f"   Slug: {wieniawa.slug}")
            print(f"   Aktualne miasto (address_city): {wieniawa.address_city}")
            print(f"   Aktualny adres pelny: {wieniawa.address_full}")

            print("\n   ZMIANY:")
            print(f"   - address_city: '{wieniawa.address_city}' -> 'Rekowo Gorne'")

            # Aktualizuj tez pelny adres jesli istnieje
            new_address_full = None
            if wieniawa.address_full:
                # Zamien stare miasto na nowe w pelnym adresie
                if wieniawa.address_city and wieniawa.address_city in str(wieniawa.address_full):
                    new_address_full = wieniawa.address_full.replace(wieniawa.address_city, 'Rekowo Gorne')
                    print(f"   - address_full: '{wieniawa.address_full}' -> '{new_address_full}'")

            if not dry_run:
                wieniawa.address_city = 'Rekowo Gorne'
                if new_address_full:
                    wieniawa.address_full = new_address_full
                wieniawa.last_updated = datetime.now()
                wieniawa.data_source = 'Manual correction (2025-12-29)'
                print("   [OK] Zmiany zapisane")
        else:
            print("   [BLAD] Firma Hotel SPA Wieniawa nie znaleziona!")

        # ============================================================
        # 3. Wejherplast (ID: 74) - zmiana profilu
        # ============================================================
        print("\n" + "-" * 50)
        print("3. WEJHERPLAST (ID: 74)")
        print("-" * 50)

        wejherplast = db.query(Company).filter_by(id=74).first()
        if not wejherplast:
            wejherplast = db.query(Company).filter(Company.name.ilike('%wejherplast%')).first()

        if wejherplast:
            print(f"   Nazwa: {wejherplast.name}")
            print(f"   Slug: {wejherplast.slug}")
            print(f"   Aktualna kategoria ID: {wejherplast.category_id}")
            print(f"   Aktualna kategoria: {wejherplast.category.name if wejherplast.category else 'brak'}")
            print(f"   Aktualny industry_sector: {wejherplast.industry_sector}")
            print(f"   Aktualny opis krotki: {wejherplast.description_short}")
            print(f"   Aktualny opis pelny: {wejherplast.description_full[:100] if wejherplast.description_full else 'brak'}...")

            # Zmiana kategorii na Uslugi lub Produkcja (drukarnia)
            # Media moze byc tez odpowiednia (reklama, druk)
            media_category = categories.get('media')
            produkcja_category = categories.get('produkcja')

            # Drukarnia poligraficzna - najlepsza kategoria to Media (marketing, reklama, druk)
            target_category = media_category or produkcja_category

            print("\n   ZMIANY:")
            print(f"   - category_id: {wejherplast.category_id} -> {target_category.id if target_category else 'brak'} ({target_category.name if target_category else 'brak'})")
            print(f"   - industry_sector: '{wejherplast.industry_sector}' -> 'Poligrafia i druk'")
            print(f"   - description_short: '{wejherplast.description_short}' -> 'Drukarnia poligraficzna - druk cyfrowy i offsetowy'")

            if not dry_run:
                wejherplast.category_id = target_category.id if target_category else wejherplast.category_id
                wejherplast.industry_sector = 'Poligrafia i druk'
                wejherplast.description_short = 'Drukarnia poligraficzna - druk cyfrowy i offsetowy'
                # Aktualizuj tez pelny opis jesli zawiera informacje o tworzywach sztucznych
                if wejherplast.description_full and 'tworzyw' in wejherplast.description_full.lower():
                    wejherplast.description_full = 'Wejherplast to profesjonalna drukarnia poligraficzna swiadczaca kompleksowe uslugi druku dla firm. Specjalizujemy sie w druku cyfrowym, offsetowym oraz materialachreklamowych.'
                wejherplast.last_updated = datetime.now()
                wejherplast.data_source = 'Manual correction (2025-12-29)'
                print("   [OK] Zmiany zapisane")
        else:
            print("   [BLAD] Firma Wejherplast nie znaleziona!")

        # ============================================================
        # PODSUMOWANIE
        # ============================================================
        print("\n" + "=" * 70)

        if dry_run:
            print("DRY RUN ZAKONCZONY - zadne zmiany nie zostaly zapisane")
            print("\nAby zastosowac zmiany, uruchom bez flagi --dry-run:")
            print("  python3 fix_company_data_corrections.py")
        else:
            db.commit()
            print("KOREKTA ZAKONCZYNA - 3 FIRMY ZAKTUALIZOWANE")
            print("\nZmiany zostaly zapisane w bazie danych.")

        print("=" * 70)

    except Exception as e:
        print(f"\n[BLAD KRYTYCZNY] {e}")
        db.rollback()
        raise
    finally:
        db.close()


def show_current_state():
    """Pokaz aktualny stan firm przed korektami."""
    db = SessionLocal()
    try:
        print("\n" + "=" * 70)
        print("AKTUALNY STAN FIRM (przed korektami)")
        print("=" * 70)

        for company_id, name_hint in [(35, 'hillob'), (36, 'wieniawa'), (74, 'wejherplast')]:
            company = db.query(Company).filter_by(id=company_id).first()
            if not company:
                company = db.query(Company).filter(Company.name.ilike(f'%{name_hint}%')).first()

            if company:
                print(f"\n{company.name} (ID: {company.id})")
                print(f"  - Slug: {company.slug}")
                print(f"  - Kategoria: {company.category.name if company.category else 'brak'}")
                print(f"  - Miasto: {company.address_city}")
                print(f"  - Sektor: {company.industry_sector}")
                print(f"  - Opis: {company.description_short}")
            else:
                print(f"\n[!] Firma {name_hint} nie znaleziona (ID: {company_id})")
    finally:
        db.close()


if __name__ == "__main__":
    # Parsuj argumenty
    dry_run = '--dry-run' in sys.argv or '-n' in sys.argv
    show_state = '--show' in sys.argv or '-s' in sys.argv

    if '--help' in sys.argv or '-h' in sys.argv:
        print(__doc__)
        print("\nUzycie:")
        print("  python3 fix_company_data_corrections.py [opcje]")
        print("\nOpcje:")
        print("  --dry-run, -n    Pokaz zmiany bez zapisywania")
        print("  --show, -s       Pokaz aktualny stan firm przed zmianami")
        print("  --help, -h       Pokaz ta pomoc")
        sys.exit(0)

    if show_state:
        show_current_state()

    fix_company_data_corrections(dry_run=dry_run)
