#!/usr/bin/env python3
"""
Daily Pinterest pin cleanup — only runs if pin count > MAX_KEEP.
Preserves newest MAX_KEEP pins, deletes the rest (up to MAX_DELETE per run).
"""
import time, logging
from pathlib import Path
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeout

MAX_KEEP   = 20   # Stop deleting once this many pins remain
MAX_DELETE = 50   # Max deletions per run
URL = "https://www.pinterest.com/rmacsparran/_created/"

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")
log = logging.getLogger(__name__)

data_dir = Path("/app/data/pinterest")
state_file = data_dir / "browser_state.json"
if not state_file.exists():
    log.error("No browser state"); exit(1)

deleted = 0
with sync_playwright() as p:
    browser = p.chromium.launch(headless=True,
        args=['--no-sandbox','--disable-dev-shm-usage','--disable-gpu','--disable-extensions'])
    ctx = browser.new_context(storage_state=str(state_file))
    page = ctx.new_page()
    page.set_default_timeout(20000)

    # Quick count first
    page.goto(URL, wait_until="domcontentloaded", timeout=60000)
    time.sleep(8)
    page.evaluate("window.scrollTo(0, 800)")
    time.sleep(2)
    pins = page.query_selector_all('[data-test-id="pin"]')
    log.info(f"Pins visible: {len(pins)}")

    if len(pins) <= MAX_KEEP:
        log.info(f"Under {MAX_KEEP} pins — nothing to do")
        browser.close()
        exit(0)

    log.info(f"Deleting pins until {MAX_KEEP} remain (max {MAX_DELETE} this run)")
    consecutive_fails = 0

    while deleted < MAX_DELETE:
        try:
            page.goto(URL, wait_until="domcontentloaded", timeout=60000)
            time.sleep(8)
            page.evaluate("window.scrollTo(0, 800)")
            time.sleep(2)
            pins = page.query_selector_all('[data-test-id="pin"]')
            if not pins or len(pins) <= MAX_KEEP:
                log.info(f"Down to {len(pins)} pins — done")
                break

            pins[0].click(); time.sleep(3)
            page.wait_for_selector('[data-test-id="closeup-action-bar-button"]', timeout=8000).click(); time.sleep(2)
            page.wait_for_selector('[data-test-id="pin-action-dropdown-edit-pin"]', timeout=6000).click(); time.sleep(3)
            page.wait_for_selector('[data-test-id="delete-pin-button"]', timeout=6000).click(); time.sleep(2)
            try:
                page.wait_for_selector('[data-test-id="confirm-button"], button:text("Delete")', timeout=3000).click()
                time.sleep(1)
            except PlaywrightTimeout:
                pass
            deleted += 1
            consecutive_fails = 0
            log.info(f"Deleted #{deleted} (remaining ~{len(pins)-1})")

        except Exception as e:
            consecutive_fails += 1
            log.warning(f"Error ({consecutive_fails}): {str(e)[:80]}")
            try: page.keyboard.press('Escape')
            except: pass
            time.sleep(2)
            if consecutive_fails >= 5:
                log.warning("5 fails — stopping")
                break

    browser.close()

log.info(f"Done: {deleted} deleted")
