#!/usr/bin/env python3
"""Replace 'Compared to Other Casinos' paragraph with comparison table. 5-10 random casinos per page."""

import re
import random
from pathlib import Path

BASE = Path(__file__).resolve().parent / "irish-online-casino"
EXCLUDE = {"terms", "privacy", "responsible-gambling", "disclaimer", "trust-badges"}

# slug -> (name, bonus, min_dep, wager, logo)
CASINOS = {
    "spin": ("Spin Casino", "Up to €1000 + 10 Daily Spins", "€10", "35×", "spincasino.png"),
    "zodiac": ("Zodiac Casino", "Up to €480 + 80 FS (3 dep)", "€1", "30×", "zodiaccasino.png"),
    "mega": ("Mega Casino", "100% up to €200 + 125 FS", "€10", "30×", "megacasino.png"),
    "boo": ("Boo Casino", "Up to €1000 + 150 FS (3 dep)", "€20", "40×", "boocasino.png"),
    "bizzo": ("Bizzo Casino", "100% up to €100 + 100 FS", "€20", "40×", "bizzocasio.png"),
    "21-casino": ("21 Casino", "100% up to €121", "€10", "35×", "21casino.png"),
    "energy": ("Energy Casino", "100% up to €200 + 100 FS", "€10", "35×", "energycasino.jpeg"),
    "mr-play": ("Mr Play Casino", "100% up to €200 + 100 FS", "€10", "35×", "mrplaycasino.png"),
    "playzee": ("Playzee Casino", "100% up to €500 + 200 FS", "€10", "35×", "playzeecasino.png"),
    "dunder": ("Dunder Casino", "100% up to €600 + 200 FS", "€10", "35×", "dundercasino.png"),
    "blackjack-casino": ("Blackjack Casino", "100% up to €500 + 50 FS", "€10", "35×", "blackjackcasino.avif"),
    "vip-casino": ("VIP Casino", "100% up to €300 + 50 FS", "€10", "35×", "vipcasino.jpg"),
    "golden-star": ("Golden Star Casino", "Up to €1000 + 100 FS", "€10", "40×", "goldestarcasino.png"),
    "mystake": ("Mystake Casino", "300% up to €1500 (3 dep)", "€20", "30×", "mystakecasino.png"),
    "doggo": ("Doggo Casino", "100% up to €500 + 200 FS", "€20", "35×", "doggocasino.webp"),
    "supersport": ("Supersport Casino", "100% up to €200 + 50 FS", "€10", "35×", "superspotcasino.jpg"),
    "spinia": ("Spinia Casino", "Up to €250 + 50 FS (2 dep)", "€10", "35×", "spiniacasino.png"),
    "betiton": ("Betiton Casino", "100% up to €150 + 150 FS", "€10", "35×", "betitoncasino.jpeg"),
    "hopa": ("Hopa Casino", "Up to €500 + 100 FS (3 dep)", "€10", "35×", "hopacasino.png"),
    "friday-casino": ("Friday Casino", "100% up to €500 + 200 FS", "€10", "40×", "fridaycasino.webp"),
    "777-online": ("777 Online Casino", "100% up to €777", "€20", "35×", "777onlinecasino.jpg"),
    "polestar": ("Polestar Casino", "100% up to €200 + 100 FS", "€10", "35×", "polestarcasino.webp"),
    "netent-casino": ("NetEnt Casino", "100% up to €200 + 100 FS", "€10", "35×", "netentcasino.png"),
    "powbet": ("Powbet Casino", "100% up to €777", "€20", "35×", "powbetcasino.jpg"),
    "mansion": ("Mansion Casino", "100% up to €500", "€20", "20×", "mansioncasino.png"),
    "scatters": ("Scatters Casino", "€25 risk-free + 100 FS", "€10", "35×", "scatterscasino.png"),
    "star-casino": ("Star Casino", "100% up to €300 + 75 FS", "€10", "35×", "starcasino.jpeg"),
    "axe": ("Axe Casino", "100% up to €1500 + 200 FS", "€20", "45×", "axecasino.png"),
    "captain-cooks": ("Captain Cooks Casino", "Up to €500 + 50 FS", "€10", "35×", "captaincookscasino.png"),
    "tsars": ("Tsars Casino", "100% up to €500 + 100 FS", "€10", "35×", "tsarscasino.webp"),
    "revolution": ("Revolution Casino", "100% up to €500 + 100 FS", "€10", "35×", "revolutioncasino.webp"),
    "quatro": ("Quatro Casino", "100% up to €200 + 50 FS", "€10", "35×", "quatrocasino.webp"),
    "dolly": ("Dolly Casino", "100% up to €300 + 100 FS", "€10", "35×", "dollycasino.webp"),
    "rollino": ("Rollino Casino", "100% up to €200 + 50 FS", "€10", "35×", "rollinocasino.webp"),
    "quickwin": ("Quickwin Casino", "100% up to €200 + 50 FS", "€10", "35×", "quickwincasino.webp"),
    "cocoa": ("Cocoa Casino", "100% up to €150 + 50 FS", "€10", "35×", "cocoacasino.png"),
    "barz": ("Barz Casino", "100% up to €200 + 100 FS", "€10", "35×", "barzcasino.png"),
    "winnerz": ("Winnerz Casino", "100% up to €300 + 100 FS", "€10", "35×", "winnerzcasino.png"),
    "cookie-casino": ("Cookie Casino", "100% up to €200 + 50 FS", "€5", "35×", "cookiecasino.webp"),
    "lucky-dreams": ("Lucky Dreams Casino", "100% up to €500 + 100 FS", "€10", "35×", "luckydreamscasino.png"),
    "boho": ("Boho Casino", "100% up to €200 + 50 FS", "€10", "35×", "bohocasino.png"),
    "d1-casino": ("D1 Casino", "100% up to €150 + 50 FS", "€5", "35×", "d1casino.webp"),
    "phone-casino": ("Phone Casino", "100% up to €200 + 50 FS", "€10", "35×", "phonecasino.jpg"),
    "carlton": ("Carlton Casino", "100% up to €200 + 50 FS", "€10", "35×", "carltoncasino.svg"),
    "my-empire": ("My Empire Casino", "100% up to €500 + 100 FS", "€10", "35×", "myempirecasino.svg"),
    "grand-mondial": ("Grand Mondial Casino", "100% up to €250 + 50 FS", "€10", "35×", "grandmondialcasino.png"),
    "karamba": ("Karamba Casino", "100% up to €50 + 100 FS", "€10", "35×", "karambacasino.png"),
    "arena": ("Arena Casino", "100% up to €200 + 100 FS", "€10", "35×", "arenacasino.png"),
    "betinia": ("Betinia Casino", "100% up to €200 + 100 FS", "€10", "35×", "betiniacasino.png"),
    "victoria": ("Victoria Casino", "100% up to €300 + 75 FS", "€10", "35×", "victoriacasino.png"),
    "20bet": ("20bet Casino", "100% up to €500 + 120 FS", "€10", "35×", "20betcasino.webp"),
}

PAY_ICONS = '<img src="/publics/logos/visa.png" alt="Visa" class="irish-pay-mini" width="32" height="20"/><img src="/publics/logos/paypal.png" alt="PayPal" class="irish-pay-mini" width="32" height="20"/><img src="/publics/logos/applepay.jpg" alt="Apple Pay" class="irish-pay-mini" width="32" height="20"/>'


def build_row(slug: str, editors_choice: bool = False) -> str:
    if slug not in CASINOS:
        return ""
    name, bonus, min_dep, wager, logo = CASINOS[slug]
    ec = ' <span class="irish-editors-badge">Editor\'s Choice</span>' if editors_choice else ""
    cls = ' class="irish-editors-choice"' if editors_choice else ""
    return f'<tr{cls}><td class="irish-casino-cell"><span class="irish-table-logo"><img src="/publics/casinos/{logo}" alt="" onerror="this.style.display=\'none\'"/></span><a href="/irish-online-casino/{slug}">{name}</a>{ec}</td><td>{bonus}</td><td>{min_dep}</td><td>{wager}</td><td class="irish-payments-cell">{PAY_ICONS}</td><td class="irish-action-cell"><a href="/go/{slug}" class="irish-cta-btn" rel="nofollow sponsored noopener noreferrer" target="_blank">Play Now</a> <a href="/irish-online-casino/{slug}" class="irish-table-review">Read full review</a></td></tr>'


def build_comparison_block(casino_name: str, current_slug: str) -> str:
    others = [s for s in CASINOS if s != current_slug]
    n = random.randint(5, 10)
    n = min(n, len(others))
    chosen = random.sample(others, n)
    editors_choice = "spin" in chosen
    rows = []
    for s in chosen:
        rows.append(build_row(s, editors_choice and s == "spin"))
    tbody = "\n".join(rows)
    return f'''<h2>{casino_name} Casino Compared to Other Casinos</h2>
<p>Compare {casino_name} with similar Irish online casinos. Welcome bonus, min deposit and wagering may vary.</p>
<div class="irish-table-wrap">
<table class="irish-comparison-table">
<thead>
<tr><th>Casino</th><th>Welcome Bonus</th><th>Min Dep</th><th>Wager</th><th>Payments</th><th></th></tr>
</thead>
<tbody>
{tbody}
</tbody>
</table>
</div>'''


def main():
    for p in sorted(BASE.iterdir()):
        if not p.is_dir() or p.name in EXCLUDE:
            continue
        index = p / "index.html"
        if not index.exists():
            continue
        content = index.read_text(encoding="utf-8")
        random.seed(p.name)
        m = re.search(r'<h1>([^<]+) Casino Review', content)
        casino_name = m.group(1).strip() if m else p.name.replace("-", " ").title()
        new_block = build_comparison_block(casino_name, p.name)
        old = re.search(
            r'<h2>[^<]+ Casino Compared to Other Casinos</h2>\s*<p>[^<]*</p>',
            content,
            re.DOTALL
        )
        if old:
            content = content.replace(old.group(0), new_block, 1)
            index.write_text(content, encoding="utf-8")
            print(p.name)
    print("Done.")


if __name__ == "__main__":
    main()
