"""
Umfragen teilnehmen – seriöse Seiten öffnen, Anmeldung über Jam Browser.

Ehrlich: Wenig Geld pro Umfrage (Cent bis wenige Euro). Kein Scam, kein Fake.
"""

from __future__ import annotations

import random
import time
import webbrowser
from datetime import datetime
from pathlib import Path
from urllib.parse import quote_plus

from jam.brain import JamBrain, JamState
from jam.owner import owner_name
from jam.paypal_donate import PAYPAL_EMAIL

SURVEY_ROOT = Path.home() / "Documents" / "Jam-Umfragen-Geld"
AUTO_GAP_SEC = 180.0
USER_GAP_SEC = 45.0

# Name, Anmeldung, Kurzinfo
SURVEY_SITES: tuple[tuple[str, str, str], ...] = (
    (
        "Prolific (gut bezahlt, EN)",
        "https://www.prolific.com/register",
        "Wissenschaftliche Studien, Auszahlung PayPal – Profil ehrlich ausfüllen.",
    ),
    (
        "Meinungsplatz",
        "https://www.meinungsplatz.de/anmeldung",
        "Deutsch, Gutscheine/PayPal je nach Aktion.",
    ),
    (
        "LifePoints",
        "https://www.lifepoints.com/de-de/registration",
        "Punkte sammeln → PayPal oder Gutscheine.",
    ),
    (
        "Norstatpanel",
        "https://www.norstatpanel.com/de/register",
        "Marktforschung DE, PayPal möglich.",
    ),
    (
        "Opinion Arena (Cint)",
        "https://www.opinion-arena.com/de/register",
        "Umfragen nach Profil – Auszahlung variiert.",
    ),
    (
        "Clickworker",
        "https://www.clickworker.de/clickworker/",
        "Umfragen + Mikrojobs, Auszahlung PayPal/SEPA.",
    ),
    (
        "Streetbees",
        "https://www.streetbees.com/",
        "Kurze Tasks & Umfragen, App oft nötig.",
    ),
    (
        "Swagbucks",
        "https://www.swagbucks.com/p/register",
        "Umfragen, Videos – teils US-fokussiert.",
    ),
)

LINES = (
    "{owner}, ich hab **Umfragen-Seiten** im **Jam Browser** geöffnet – dort anmelden und teilnehmen. "
    "Echtes Geld: oft Cent bis ein paar Euro pro Umfrage, PayPal {paypal}.",
    "Umfragen-Modus AN! Plan liegt in Jam-Umfragen-Geld – ich öffne seriöse Anmeldungen für dich.",
)


def hears_surveys(text: str) -> bool:
    h = text.lower().replace("jam", " ")
    if "umfrag" in h or "survey" in h:
        if any(w in h for w in ("geld", "verdien", "teilneh", "mitmach", "machen", "start")):
            return True
    if "umfragen" in h and any(w in h for w in ("teil", "mit", "geld", "verdien")):
        return True
    return False


def is_survey_mode(state: JamState) -> bool:
    return bool(getattr(state, "jam_survey_earn_mode", False))


def _write_survey_guide(owner: str) -> Path:
    SURVEY_ROOT.mkdir(parents=True, exist_ok=True)
    rows = "\n".join(
        f"- **{name}:** {url}\n  {hint}\n" for name, url, hint in SURVEY_SITES
    )
    path = SURVEY_ROOT / "DAVID_UMFRAGEN_START.txt"
    path.write_text(
        f"""JAM – UMFRAGEN GELD ({owner})
==============================
{datetime.now().strftime('%d.%m.%Y %H:%M')}

EHRLICH:
- Umfragen = viel Zeit, wenig Geld (oft 0,50–3 € pro Umfrage).
- Nur **seriöse** Seiten – nie Gebühren zahlen für „Zugang“!
- Profil **ehrlich** (Alter, Land) – sonst Sperre.
- Auszahlung oft ab 5–25 € Mindestbetrag auf PayPal.

PAYPAL DAVID: {PAYPAL_EMAIL}

JAM ÖFFNET ANMELDUNG (Jam Browser):
{rows}

TIPP:
1. Jam Browser → nacheinander anmelden (gleiche E-Mail überall ok).
2. E-Mail-Benachrichtigungen AN → neue Umfragen.
3. Täglich 15–30 Min = kleines Taschengeld.
4. Mehr Geld: Fiverr/Verkauf (Jam macht parallel weiter).

Sag: „Jam, Umfrage Status“ oder „Jam, nächste Umfrage-Seite“
""",
        encoding="utf-8",
    )
    html = SURVEY_ROOT / "index.html"
    lis = "".join(f'<li><a href="{u}" target="_blank">{n}</a> – {h[:80]}</li>' for n, u, h in SURVEY_SITES)
    html.write_text(
        f"""<!DOCTYPE html><html lang="de"><head><meta charset="utf-8">
<title>Umfragen Geld – Jam</title>
<style>body{{font-family:system-ui;max-width:720px;margin:2rem auto;padding:1.5rem;
background:#0f172a;color:#e2e8f0}} a{{color:#38bdf8}}</style></head>
<body><h1>📋 Umfragen für {owner}</h1><ul>{lis}</ul>
<p>PayPal: {PAYPAL_EMAIL}</p></body></html>""",
        encoding="utf-8",
    )
    return path


def _open_in_jam_browser(urls: list[str]) -> None:
    try:
        from jam.jam_browser import launch_jam_browser

        launch_jam_browser(detached=True)
    except Exception:
        pass
    for url in urls[:4]:
        try:
            webbrowser.open(url, new=2)
        except OSError:
            pass
        time.sleep(0.5)


def _try_signup_playwright(url: str, email: str, password: str) -> str:
    try:
        from jam.platform_auth import attempt_browser_signup

        name = url.split("/")[2]
        status, steps = attempt_browser_signup(
            name, url, email, password, keep_open_sec=4.0
        )
        return f"{name}: {', '.join(steps) or status}"[:80]
    except Exception:
        return ""


def run_survey_mission(brain: JamBrain, *, user_initiated: bool = False) -> str:
    """Umfragen: Guide schreiben + Anmeldeseiten im Jam Browser öffnen."""
    state = brain.state
    owner = owner_name(state)

    gap = USER_GAP_SEC if user_initiated else AUTO_GAP_SEC
    if time.time() - getattr(state, "last_survey_earn_at", 0.0) < gap:
        wait = int(gap - (time.time() - state.last_survey_earn_at))
        return f"Nächste Umfragen-Runde in {wait} Sek."

    state.jam_survey_earn_mode = True
    guide = _write_survey_guide(owner)

    try:
        import os
        import subprocess

        if os.name == "nt":
            subprocess.run(["explorer", str(SURVEY_ROOT)], check=False, timeout=5)
    except Exception:
        pass

    urls = [u for _n, u, _h in SURVEY_SITES]
    _open_in_jam_browser(urls)

    signup_notes: list[str] = []
    try:
        from jam.platform_auth import load_credentials

        creds = load_credentials()
        if creds and user_initiated:
            email, password = creds
            for name, url, _ in SURVEY_SITES[:3]:
                note = _try_signup_playwright(url, email, password)
                if note:
                    signup_notes.append(note)
    except Exception:
        pass

    state.last_survey_earn_at = time.time()
    state.survey_earn_count = getattr(state, "survey_earn_count", 0) + 1
    state.last_action = "survey_earn"
    state.remember("Jam: Umfragen-Seiten geöffnet")
    brain.add_xp(8)
    brain.save()

    extra = f" Auto-Anmeldung: {'; '.join(signup_notes)}." if signup_notes else ""
    return (
        random.choice(LINES).format(owner=owner, paypal=PAYPAL_EMAIL)
        + f" Plan: {guide.name}. Jam Browser + Tabs offen.{extra} "
        f"Mehr Geld als Umfragen: Verkauf & Fiverr – Jam macht das parallel!"
    )[:580]


def maybe_auto_surveys(brain: JamBrain) -> str | None:
    if not is_survey_mode(brain.state):
        return None
    if random.random() > 0.2:
        return None
    if time.time() - getattr(brain.state, "last_survey_earn_at", 0.0) < AUTO_GAP_SEC:
        return None
    return run_survey_mission(brain, user_initiated=False)


def handle_speech(brain: JamBrain, heard: str) -> str | None:
    if hears_surveys(heard):
        return run_survey_mission(brain, user_initiated=True)
    return None
