# -*- coding: utf-8 -*-
"""
Mailchimp lista lekérő modul.
- Lekéri az összes aktív feliratkozót
- Kiszedi a keresztnevet (FNAME utolsó szava, magyar névsorend alapján)
- Visszaadja: [{email, keresztnev, teljes_nev}, ...]
"""

import requests
from config import MAILCHIMP_API_KEY, MAILCHIMP_SERVER, MAILCHIMP_LIST_ID

_BASE = f"https://{MAILCHIMP_SERVER}.api.mailchimp.com/3.0"
_AUTH = ("anystring", MAILCHIMP_API_KEY)


def _keresztnev_kinyeres(fname: str) -> str:
    """
    Magyar névsorrendből (Vezetéknév Keresztnév) kiszedi a keresztnevet.
    Ha csak egy szó van, azt adja vissza.
    """
    reszek = fname.strip().split()
    if not reszek:
        return ""
    return reszek[-1]  # utolsó szó = keresztnév


def feliratkozok_lekeres(csak_aktiv: bool = True) -> list[dict]:
    """
    Lekéri a Mailchimp lista összes tagját és visszaadja
    [{email, keresztnev, teljes_nev}] formában.

    csak_aktiv=True esetén csak a 'subscribed' státuszúakat adja vissza.
    """
    tagok = []
    offset = 0
    limit = 500

    while True:
        r = requests.get(
            f"{_BASE}/lists/{MAILCHIMP_LIST_ID}/members",
            auth=_AUTH,
            params={
                "count": limit,
                "offset": offset,
                "fields": "members.email_address,members.full_name,members.merge_fields,members.status,total_items",
            },
            timeout=30,
        )
        r.raise_for_status()
        data = r.json()

        members = data.get("members", [])
        if not members:
            break

        for m in members:
            if csak_aktiv and m.get("status") != "subscribed":
                continue

            fname = m.get("merge_fields", {}).get("FNAME", "").strip()
            full_name = m.get("full_name", "").strip()

            # FNAME az elsődleges, ha üres akkor full_name
            nev_forrás = fname if fname else full_name
            keresztnev = _keresztnev_kinyeres(nev_forrás)

            if not keresztnev:
                continue

            tagok.append({
                "email": m.get("email_address", ""),
                "keresztnev": keresztnev,
                "teljes_nev": nev_forrás,
            })

        total = data.get("total_items", 0)
        offset += limit
        if offset >= total:
            break

    return tagok


# ── Tesztelés ─────────────────────────────────────────────────────────────────

if __name__ == "__main__":
    print("Mailchimp lista lekérés...")
    tagok = feliratkozok_lekeres(csak_aktiv=False)  # False = minden státusz
    print(f"Összesen {len(tagok)} tag (névvel):\n")
    for t in tagok:
        print(f"  {t['teljes_nev']:30s}  keresztnév: {t['keresztnev']:15s}  {t['email']}")
