"""
Aggiorna il foglio cantine con nomi fittizi e fa screenshot autentico.
Sheet: 1NGVWi_onRuUtkol87-7Ln1m_U8Xa1p2J0eEiCTe505w ("Ristoranti Toscana e dintorni")
"""
import subprocess, json, sys, time, os

SHEET_ID = "1NGVWi_onRuUtkol87-7Ln1m_U8Xa1p2J0eEiCTe505w"
SHEET_URL = f"https://docs.google.com/spreadsheets/d/{SHEET_ID}/edit#gid=0"
OUT_IMAGE = "/home/deploy/Business/OS AutoMatePRO/website/public/ai-images/cantine-excel-sample.jpg"

# 50 nomi fittizi abbinati alle città originali
FICTIONAL_NAMES = [
    "Trattoria Il Castagno",         # Firenze
    "Osteria dei Colli Senesi",      # Siena
    "Ristorante La Rocca d'Arezzo",  # Arezzo
    "Trattoria del Borgo Antico",    # Grosseto
    "Enoteca Lucchese",              # Lucca
    "Ristorante La Rupe",            # Perugia
    "Osteria della Quercia",         # Orvieto
    "Trattoria Il Ginepro",          # Viterbo
    "La Bottega dei Sapori",         # Pisa
    "Trattoria La Meridiana",        # Cortona
    "Ristorante Il Podere dei Tartufi", # San Miniato
    "Osteria della Valle Verde",     # Pistoia
    "Trattoria La Fontana",          # Massa Marittima
    "Locanda del Bosco",             # Volterra
    "Ristorante Il Noce",            # Chianciano Terme
    "Osteria La Canonica",           # Sarteano
    "Trattoria Il Casale",           # Montefiascone
    "Ristorante La Pietra",          # Pitigliano
    "Trattoria della Selva",         # Sovana
    "Osteria della Vigna",           # Chiusi
    "Trattoria Il Campo",            # Colle di Val d'Elsa
    "Ristorante La Torre Pratese",   # Prato
    "Osteria della Collina",         # Castiglion d'Orcia
    "Trattoria Il Fienile",          # Civita di Bagnoregio
    "Ristorante La Corte",           # Montepulciano
    "Trattoria del Tramonto",        # Greve in Chianti
    "Osteria del Grano",             # Gaiole in Chianti
    "Trattoria La Vite",             # Castelnuovo Berardenga
    "Ristorante Il Cinghiale",       # Follonica
    "Osteria del Mare",              # Orbetello
    "Trattoria La Baia",             # Porto Ercole
    "Ristorante Il Castello",        # Montalcino
    "Trattoria della Vigna",         # Pienza
    "Osteria Il Leccio",             # San Quirico d'Orcia
    "Ristorante La Creta",           # Asciano
    "Trattoria del Mulino",          # Buonconvento
    "Osteria La Macchia",            # Capalbio
    "Trattoria del Lago",            # Castiglione della Pescaia
    "Ristorante Il Podere Vecchio",  # Sansepolcro
    "Trattoria La Selva Aretina",    # Castiglion Fiorentino
    "Osteria La Vista",              # Fiesole
    "Ristorante Il Borgo",           # Todi
    "Trattoria La Pigna",            # Spoleto
    "Osteria della Pace",            # Assisi
    "Trattoria Il Carrubo",          # Narni
    "Ristorante La Roccia",          # Foligno
    "Osteria del Vento",             # Bolsena
    "Trattoria La Quercia",          # Tuscania
    "Ristorante Il Glicine",         # Acquapendente
    "Trattoria delle Erbe",          # Acquapendente
]

FICTIONAL_EMAILS = [
    "info@castagno.example",
    "info@collisenesi.example",
    "info@larocca.example",
    "info@borgoantico.example",
    "info@enotecalucchese.example",
    "info@larupe.example",
    "info@quercia.example",
    "info@ginepro.example",
    "info@bottegasapori.example",
    "info@meridiana.example",
    "info@poderetartufi.example",
    "info@valleverde.example",
    "info@lafontana.example",
    "info@locandabosco.example",
    "info@ilnoce.example",
    "info@lacanonica.example",
    "info@ilcasale.example",
    "info@lapietra.example",
    "info@selva.example",
    "info@vigna.example",
    "info@ilcampo.example",
    "info@latorre.example",
    "info@collina.example",
    "info@ilfienile.example",
    "info@lacorte.example",
    "info@tramonto.example",
    "info@delgrano.example",
    "info@lavite.example",
    "info@cinghiale.example",
    "info@delmare.example",
    "info@labaia.example",
    "info@ilcastello.example",
    "info@dellavigna.example",
    "info@illeccio.example",
    "info@lacreta.example",
    "info@delmulino.example",
    "info@lamacchia.example",
    "info@dellago.example",
    "info@podere-vecchio.example",
    "info@selva-aretina.example",
    "info@lavista.example",
    "info@ilborgo.example",
    "info@lapigna.example",
    "info@delpace.example",
    "info@carrubo.example",
    "info@laroccia.example",
    "info@delvento.example",
    "info@laquercia.example",
    "info@glicine.example",
    "info@delleerbe.example",
]

def gws_update(range_name, values):
    body = json.dumps({"values": values})
    params = json.dumps({
        "spreadsheetId": SHEET_ID,
        "range": range_name,
        "valueInputOption": "USER_ENTERED"
    })
    result = subprocess.run(
        ["gws", "sheets", "spreadsheets", "values", "update",
         "--params", params, "--json", body],
        capture_output=True, text=True
    )
    if result.returncode != 0:
        print(f"ERRORE aggiornamento {range_name}:", result.stderr)
        return False
    print(f"OK: {range_name} aggiornato")
    return True

def update_sheet():
    print("=== Aggiornamento nomi fittizi ===")
    names_values = [[n] for n in FICTIONAL_NAMES]
    emails_values = [[e] for e in FICTIONAL_EMAILS]

    ok1 = gws_update("Ristoranti Toscana e dintorni!A2:A51", names_values)
    ok2 = gws_update("Ristoranti Toscana e dintorni!D2:D51", emails_values)
    return ok1 and ok2

def take_screenshot():
    print("=== Screenshot con Playwright ===")
    from playwright.sync_api import sync_playwright

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # headless=False per Auth Google
        context = browser.new_context(
            viewport={"width": 1440, "height": 820},
            storage_state=None
        )

        page = context.new_page()

        # Vai al foglio
        print(f"Apro: {SHEET_URL}")
        page.goto(SHEET_URL, wait_until="networkidle", timeout=30000)
        time.sleep(5)

        # Controlla se siamo sulla pagina di login
        if "accounts.google.com" in page.url or "signin" in page.url.lower():
            print("ERRORE: richiesta autenticazione Google")
            print("Devi essere già loggato con il profilo Chrome esistente")
            browser.close()
            return False

        # Aspetta che il foglio carichi
        try:
            page.wait_for_selector(".grid-container, .waffle-grid-container, [class*='grid']", timeout=20000)
        except:
            print("Grid non trovato, aspetto comunque...")

        time.sleep(4)

        # Screenshot della pagina intera
        page.screenshot(path=OUT_IMAGE, full_page=False, type="jpeg", quality=90)
        print(f"Screenshot salvato: {OUT_IMAGE}")

        browser.close()
    return True

def take_screenshot_with_profile():
    """Usa il profilo Chrome esistente di Alex con le sessioni Google già attive."""
    print("=== Screenshot con profilo Chrome esistente ===")
    from playwright.sync_api import sync_playwright
    import glob

    # Trova il profilo Chrome di Windows
    chrome_user_data = os.path.expanduser("~\\AppData\\Local\\Google\\Chrome\\User Data")

    with sync_playwright() as p:
        context = p.chromium.launch_persistent_context(
            user_data_dir=chrome_user_data,
            executable_path="C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
            headless=False,
            args=["--no-first-run", "--no-default-browser-check"],
            viewport={"width": 1440, "height": 820},
        )

        page = context.new_page()
        print(f"Apro: {SHEET_URL}")
        page.goto(SHEET_URL, wait_until="networkidle", timeout=30000)

        # Aspetta login se necessario
        if "accounts.google.com" in page.url:
            print("Serve login manuale — aspetto 30s...")
            time.sleep(30)

        time.sleep(5)

        # Aspetta il foglio
        try:
            page.wait_for_selector(".grid-container, [role='grid'], .waffle", timeout=20000)
            print("Foglio caricato!")
        except Exception as e:
            print(f"Attendo comunque (foglio potrebbe essere caricato): {e}")

        time.sleep(3)

        page.screenshot(path=OUT_IMAGE, full_page=False, type="jpeg", quality=90)
        print(f"Screenshot salvato: {OUT_IMAGE}")

        context.close()
    return True

if __name__ == "__main__":
    mode = sys.argv[1] if len(sys.argv) > 1 else "all"

    if mode in ("all", "update"):
        ok = update_sheet()
        if not ok:
            print("ERRORE nell'aggiornamento sheet")
            sys.exit(1)
        print("Sheet aggiornato. Aspetto 3s per propagazione...")
        time.sleep(3)

    if mode in ("all", "screenshot"):
        ok = take_screenshot_with_profile()
        if not ok:
            print("ERRORE screenshot")
            sys.exit(1)

    print("=== FATTO ===")
