"""Scraping simples do perfil publico do Francisco Borrello no Instagram."""
from playwright.sync_api import sync_playwright
import os
import json
import time

DEST = "/opt/mia/workspace/clientes/borrello/instagram_analise"
os.makedirs(DEST, exist_ok=True)

UA = ("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
      "(KHTML, like Gecko) Chrome/126.0 Safari/537.36")

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True, args=["--no-sandbox"])
    context = browser.new_context(
        user_agent=UA,
        viewport={"width": 1400, "height": 2200},
        locale="pt-BR",
    )
    page = context.new_page()

    print("[*] Abrindo perfil...")
    try:
        page.goto("https://www.instagram.com/franciscoborrello/",
                  wait_until="domcontentloaded", timeout=45000)
    except Exception as e:
        print(f"[!] Erro no goto: {e}")

    page.wait_for_timeout(6000)

    # fecha popup de login se aparecer
    for selector in ['button:has-text("Agora nao")',
                     'button:has-text("Not now")',
                     'div[role="dialog"] button[type="button"]']:
        try:
            page.click(selector, timeout=1500)
            print(f"[*] Fechei popup: {selector}")
            break
        except Exception:
            pass

    page.wait_for_timeout(2000)

    # scroll pra carregar mais posts
    for i in range(3):
        page.mouse.wheel(0, 1400)
        page.wait_for_timeout(1500)

    # screenshot full
    page.screenshot(path=f"{DEST}/perfil_grid.png", full_page=True)
    print(f"[*] Screenshot da grid salvo")

    # coletar URLs dos posts visiveis
    hrefs = page.eval_on_selector_all(
        'a[href*="/p/"], a[href*="/reel/"]',
        'els => els.map(e => e.href)'
    )
    hrefs = list(dict.fromkeys(hrefs))  # dedupe mantendo ordem
    print(f"[*] Encontrei {len(hrefs)} posts")

    # coletar srcs das imagens visiveis na grid
    img_srcs = page.eval_on_selector_all(
        'main img',
        'els => els.map(e => ({src: e.src, alt: e.alt}))'
    )

    with open(f"{DEST}/posts_urls.json", "w") as f:
        json.dump({"hrefs": hrefs, "imgs": img_srcs}, f, indent=2)

    # baixar cada post individual (ate 12) e screenshotar
    for i, url in enumerate(hrefs[:12], start=1):
        try:
            print(f"[*] Post {i}: {url}")
            page.goto(url, wait_until="domcontentloaded", timeout=30000)
            page.wait_for_timeout(3500)
            # fecha popup de novo se aparecer
            for selector in ['button:has-text("Agora nao")',
                             'button:has-text("Not now")']:
                try:
                    page.click(selector, timeout=800)
                    break
                except Exception:
                    pass
            page.wait_for_timeout(1000)
            page.screenshot(path=f"{DEST}/post_{i:02d}.png", full_page=False)
        except Exception as e:
            print(f"[!] Erro post {i}: {e}")

    browser.close()
    print("[OK] Finalizado")
