#!/usr/bin/env python3
"""
NordaBiznes - Aktualizacja zweryfikowanych danych firm
Data weryfikacji: 2025-12-29
Autor: Claude Code (automatyczna weryfikacja)

Ten skrypt aktualizuje dane firm na podstawie weryfikacji przeprowadzonej
przez 8 równoległych agentów sprawdzających rejestry KRS/CEIDG oraz strony WWW.
"""

import os
import sys
from datetime import datetime

# Dodaj ścieżkę do modułów
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from database import SessionLocal, Company, CompanyQualityTracking

# Data weryfikacji
VERIFICATION_DATE = datetime(2025, 12, 29)
VERIFIED_BY = "Claude Code - automatyczna weryfikacja (8 agentów równoległych)"

# Zmiany do wdrożenia
PHONE_UPDATES = {
    14: "+48 530 777 530",      # Agis Management Group
    25: "+48 58 738 97 01",     # Chopin TV Kablowa
    27: "+48 58 677 52 39",     # CrisTap
    37: "+48 502 314 830",      # Joker
    53: "+48 58 677 47 71",     # PHU TED
    64: "+48 698 367 205",      # SCROL
    68: "+48 58 672 30 21",     # Sigma Budownictwo
    75: "+48 58 673 04 00",     # Pucka Gosp. Komunalna
    76: "+48 668 172 141",      # PHU S&K TOBACCO
    77: "+48 666 999 964",      # PHU Witka
}

EMAIL_UPDATES = {
    22: "sekretariat@bibrokers.pl",     # Bibrokers
    30: "ekod@ekod.com.pl",             # Ekod
    37: "biuro@joker-reklamy.pl",       # Joker
    38: "info@kammet.com.pl",           # KAMMET
    52: "biuro@pgconstruction.pl",      # PG Construction
    56: "wejherowo@sklepprosport.pl",   # Pro-Sport
    69: "biuro@rumiasim.pl",            # SIM Rumia
    75: "sekretariat@pgkpuck.pl",       # Pucka Gosp. Komunalna
    76: "kontakt@lordalkohole.pl",      # PHU S&K TOBACCO
    77: "biuro@uwitka.com.pl",          # PHU Witka
}

# Firmy z problemami WWW (do oznaczenia)
WWW_ISSUES = {
    15: "SSL_ERROR",     # ALMARES
    19: "SSL_ERROR",     # ARD Invest
    29: "SSL_ERROR",     # Eko Laser
    40: "SSL_ERROR",     # Kancelaria Skwarło
    55: "MAINTENANCE",   # Pro-Invest
    61: "OFFLINE",       # Rubinsolar
    64: "SSL_ERROR",     # SCROL
    65: "OFFLINE",       # Semerling Security
    75: "SSL_ERROR",     # Pucka Gosp. Komunalna
}


def update_company_data(dry_run=True):
    """Aktualizuje dane firm w bazie."""
    db = SessionLocal()
    changes = []

    try:
        # Aktualizacja telefonów
        for company_id, new_phone in PHONE_UPDATES.items():
            company = db.query(Company).filter(Company.id == company_id).first()
            if company:
                old_phone = company.phone
                if not dry_run:
                    company.phone = new_phone
                    company.last_verified_at = VERIFICATION_DATE
                changes.append({
                    'company_id': company_id,
                    'company_name': company.name,
                    'field': 'phone',
                    'old_value': old_phone,
                    'new_value': new_phone
                })
                print(f"[PHONE] {company.name}: {old_phone} -> {new_phone}")

        # Aktualizacja emaili
        for company_id, new_email in EMAIL_UPDATES.items():
            company = db.query(Company).filter(Company.id == company_id).first()
            if company:
                old_email = company.email
                if not dry_run:
                    company.email = new_email
                    company.last_verified_at = VERIFICATION_DATE
                changes.append({
                    'company_id': company_id,
                    'company_name': company.name,
                    'field': 'email',
                    'old_value': old_email,
                    'new_value': new_email
                })
                print(f"[EMAIL] {company.name}: {old_email} -> {new_email}")

        # Oznaczanie problemów z WWW
        for company_id, issue_type in WWW_ISSUES.items():
            company = db.query(Company).filter(Company.id == company_id).first()
            if company:
                if not dry_run:
                    company.website_status = issue_type
                    company.website_last_analyzed = VERIFICATION_DATE
                changes.append({
                    'company_id': company_id,
                    'company_name': company.name,
                    'field': 'website_status',
                    'old_value': company.website_status,
                    'new_value': issue_type
                })
                print(f"[WWW] {company.name}: website_status = {issue_type}")

        # Aktualizacja quality tracking dla wszystkich firm
        all_companies = db.query(Company).all()
        for company in all_companies:
            tracking = db.query(CompanyQualityTracking).filter(
                CompanyQualityTracking.company_id == company.id
            ).first()

            if not dry_run:
                if not tracking:
                    tracking = CompanyQualityTracking(
                        company_id=company.id,
                        verification_count=1,
                        last_verified_at=VERIFICATION_DATE,
                        verified_by=VERIFIED_BY
                    )
                    db.add(tracking)
                else:
                    tracking.verification_count += 1
                    tracking.last_verified_at = VERIFICATION_DATE
                    tracking.verified_by = VERIFIED_BY

        if not dry_run:
            db.commit()
            print(f"\n✅ Zaktualizowano {len(changes)} zmian w bazie danych.")
        else:
            print(f"\n[DRY RUN] Znaleziono {len(changes)} zmian do wdrożenia.")
            print("Uruchom z parametrem --apply aby zastosować zmiany.")

        return changes

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


def main():
    import argparse
    parser = argparse.ArgumentParser(description='Aktualizacja zweryfikowanych danych firm NordaBiznes')
    parser.add_argument('--apply', action='store_true', help='Zastosuj zmiany (domyślnie: dry-run)')
    args = parser.parse_args()

    print("=" * 60)
    print("NordaBiznes - Aktualizacja zweryfikowanych danych")
    print(f"Data weryfikacji: {VERIFICATION_DATE.strftime('%Y-%m-%d')}")
    print("=" * 60)
    print()

    dry_run = not args.apply
    if dry_run:
        print("🔍 TRYB DRY-RUN (symulacja)")
    else:
        print("⚠️  TRYB PRODUKCYJNY - zmiany zostaną zapisane!")
    print()

    update_company_data(dry_run=dry_run)


if __name__ == '__main__':
    main()
