# remove_low_scores.py
import os
import asyncio
import argparse
import pandas as pd
from playwright.async_api import async_playwright
from save_auth import save_auth

CSV_FILE = "analysis_output.csv"
THRESHOLD_PERCENTAGE = 0.5  # Onderste 50% verwijderen

async def remove_from_favorites(urls_to_remove, dry_run=False):
    if dry_run:
        print("\n🔍 Dry-run modus actief. Deze links zouden verwijderd worden:\n")
        for url in urls_to_remove:
            print(f"📝 {url}")
        print("\n💡 Voer dit script zonder --dry-run uit om deze favorieten daadwerkelijk te verwijderen.")
        return

    # Bevestigingsvraag
    confirm = input(f"\n⚠️ Weet je zeker dat je {len(urls_to_remove)} favorieten wilt verwijderen? Typ 'JA' om door te gaan: ")
    if confirm.strip().upper() != "JA":
        print("❌ Verwijdering geannuleerd.")
        return

    async with async_playwright() as p:
        print("🌐 Browser starten...")
        browser = await p.chromium.launch(headless=False)

        if os.path.exists("auth.json"):
            context = await browser.new_context(storage_state="auth.json")
        else:
            print("🔐 Geen auth.json gevonden. Aanmaken...")
            await save_auth()
            context = await browser.new_context(storage_state="auth.json")

        page = await context.new_page()

        for url in urls_to_remove:
            try:
                await page.goto(url)
                await page.wait_for_selector("button[aria-label='Favoriet']", timeout=5000)
                await page.click("button[aria-label='Favoriet']")
                print(f"🗑️ Verwijderd uit favorieten: {url}")
                await asyncio.sleep(1)
            except Exception as e:
                print(f"⚠️ Fout bij verwijderen van {url}: {e}")

        await browser.close()

async def run(dry_run=False):
    print("📄 Data inladen...")
    df = pd.read_csv(CSV_FILE)

    if "Gewogen Score" not in df.columns:
        print("❌ Kolom 'Gewogen Score' ontbreekt in CSV-bestand.")
        return

    print("📊 Bepalen welke objecten onder de drempel vallen...")
    sorted_df = df.sort_values("Gewogen Score")
    cutoff_index = int(len(sorted_df) * THRESHOLD_PERCENTAGE)
    low_score_urls = sorted_df.iloc[:cutoff_index]["URL"].tolist()

    if not low_score_urls:
        print("✅ Geen objecten om te verwijderen.")
        return

    print(f"\n🧹 {len(low_score_urls)} laag scorende favorieten geselecteerd voor verwijdering.")
    await remove_from_favorites(low_score_urls, dry_run=dry_run)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Verwijder laag scorende vastgoedfavorieten automatisch of als dry-run.")
    parser.add_argument("--dry-run", action="store_true", help="Simuleer de verwijdering zonder wijzigingen door te voeren.")
    args = parser.parse_args()

    asyncio.run(run(dry_run=args.dry_run))
