#!/usr/bin/env python3
"""Seed disseminations data via HTTP API.

Usage:
    API_URL=http://localhost:8000 EMAIL=admin@gmail.com PASSWORD=687654 \
        python scripts/seed_disseminations.py
"""
import datetime as dt
import os
import sys

import requests


API = os.environ.get("API_URL", "http://localhost:8000")
EMAIL = os.environ.get("EMAIL", "admin@gmail.com")
PASSWORD = os.environ.get("PASSWORD", "687654")


def main():
    s = requests.Session()
    print("→ Fetching CSRF cookie")
    s.get(f"{API}/api/auth/csrf/", timeout=10).raise_for_status()
    csrf = s.cookies.get("csrftoken")
    if not csrf:
        sys.exit("Failed to obtain CSRF token")

    print(f"→ Logging in as {EMAIL}")
    headers = {"X-CSRFToken": csrf, "Referer": API + "/", "Content-Type": "application/json"}
    r = s.post(f"{API}/api/auth/login/", json={"email": EMAIL, "password": PASSWORD}, headers=headers, timeout=10)
    if r.status_code != 200:
        sys.exit(f"Login failed: {r.status_code} {r.text}")

    csrf = s.cookies.get("csrftoken") or csrf

    def post(path, body):
        r = s.post(f"{API}{path}", json=body,
                   headers={"X-CSRFToken": csrf, "Referer": API + "/", "Content-Type": "application/json"},
                   timeout=15)
        if r.status_code >= 300:
            print(f"  ! {path} → {r.status_code} {r.text[:200]}")
            r.raise_for_status()
        return r.json()

    # ── Channels ─────────────────────────────────────────────────────────
    print("\n─── Channels ───────────────────────────────────")
    channels = {}
    channel_seed = [
        ("twitter",   "CSIS Indonesia (X)",      "@csisindonesia",   "https://twitter.com/csisindonesia"),
        ("linkedin",  "CSIS Indonesia LinkedIn", "csis-indonesia",   "https://www.linkedin.com/company/csis-indonesia"),
        ("instagram", "CSIS on Instagram",       "@csisindonesia",   "https://instagram.com/csisindonesia"),
        ("facebook",  "CSIS Facebook Page",      "CSISIndonesia",    "https://facebook.com/CSISIndonesia"),
        ("youtube",   "CSIS YouTube",            "csisindonesia",    "https://youtube.com/@csisindonesia"),
        ("threads",   "CSIS Threads",            "@csisindonesia",   "https://threads.net/@csisindonesia"),
    ]
    for platform, name, handle, url in channel_seed:
        data = post("/api/disseminations/channels/", {
            "name": name, "platform": platform, "handle": handle, "profile_url": url, "active": True,
        })
        channels[platform] = data["id"]
        print(f"  + {platform:9} · {name}  ({data['id']})")

    # ── Campaigns ────────────────────────────────────────────────────────
    print("\n─── Campaigns ──────────────────────────────────")
    campaigns = {}
    campaign_seed = [
        ("Climate Policy Q2 2026",    "Drive engagement around the new climate report", "#10b981", "2026-04-01", "2026-06-30"),
        ("Indonesia Economic Outlook","Promote quarterly economic briefings",            "#3b82f6", "2026-01-01", "2026-12-31"),
        ("Capital Market Reform",     "Build awareness on capital market reforms",       "#8b5cf6", "2026-02-01", "2026-05-31"),
        ("Youth Employment",          "Highlight youth unemployment research",           "#f59e0b", "2026-03-01", "2026-06-30"),
    ]
    for name, objective, color, start, end in campaign_seed:
        data = post("/api/disseminations/campaigns/", {
            "name": name, "objective": objective, "description": "",
            "color": color, "start_date": start, "end_date": end,
        })
        campaigns[name] = data["id"]
        print(f"  + {name}  ({data['id']})")

    # ── Posts ────────────────────────────────────────────────────────────
    print("\n─── Posts ──────────────────────────────────────")
    now = dt.datetime.utcnow()
    iso = lambda delta: (now + delta).strftime("%Y-%m-%dT%H:%M:%SZ")
    future = lambda h: iso(dt.timedelta(hours=h))
    past = lambda d: iso(-dt.timedelta(days=d))

    posts_seed = [
        # title, body, status, scheduled_at, campaign_key, tags, link, channels
        ("New Climate Report Released",  "Our 2026 climate policy landscape report is out. Read it now.",  "published", past(5), "Climate Policy Q2 2026", ["climate","policy","report"], "https://csis.or.id/publications/climate-2026", ["twitter","linkedin","instagram"]),
        ("Climate Webinar This Friday",  "Join our experts to discuss Indonesia's climate roadmap.",       "scheduled", future(48), "Climate Policy Q2 2026", ["webinar","climate"], "", ["twitter","linkedin"]),
        ("Capital Market Reform Brief",  "Read our latest brief on Indonesia's capital market reforms.",   "published", past(2), "Capital Market Reform", ["economy","capital-market"], "https://csis.or.id/publications/capital-market", ["twitter","linkedin"]),
        ("Quarterly Economic Outlook Q1","Watch the Q1 2026 economic briefing replay on YouTube.",         "published", past(10), "Indonesia Economic Outlook", ["economy","quarterly"], "https://youtube.com/watch?v=demo", ["youtube","facebook"]),
        ("Youth Unemployment Stats",     "Indonesia's youth unemployment trends — key findings.",          "scheduled", future(72), "Youth Employment", ["youth","employment"], "", ["twitter","instagram"]),
        ("Draft: Mid-Year Economic Update","Outline for upcoming H1 economic review.",                     "draft", None, "Indonesia Economic Outlook", ["economy","draft"], "", ["linkedin"]),
        ("Failed Post Example",          "This one failed to publish — placeholder for testing.",          "failed", past(1), None, ["test"], "", ["twitter"]),
        ("Archived Announcement",        "Old promo post moved to archive.",                               "archived", past(30), None, ["promo"], "", ["facebook"]),
        ("Capital Market Reform Thread", "Thread breaking down the four pillars of capital market reform.","scheduled", future(24), "Capital Market Reform", ["thread","capital-market"], "", ["twitter"]),
        ("Climate Op-Ed: The Road Ahead","Op-ed by our senior researchers on the climate roadmap.",        "draft", None, "Climate Policy Q2 2026", ["op-ed","climate"], "", ["linkedin","facebook"]),
        ("Photos from Climate Forum",    "Highlights from yesterday's climate forum in Jakarta.",          "published", past(7), "Climate Policy Q2 2026", ["photos","climate"], "", ["instagram","facebook"]),
        ("LinkedIn Live: Economic Trends","Tune in for our LinkedIn Live discussing 2026 trends.",         "scheduled", future(96), "Indonesia Economic Outlook", ["live","economy"], "", ["linkedin"]),
    ]
    for title, body, status, sched, camp_key, tags, link, ch_keys in posts_seed:
        payload = {
            "title": title, "body": body, "status": status,
            "scheduled_at": sched,
            "campaign": campaigns[camp_key] if camp_key else None,
            "channels": [channels[k] for k in ch_keys if k in channels],
            "tags": tags, "link_url": link,
        }
        data = post("/api/disseminations/posts/", payload)
        print(f"  + [{status:9}] {title}  ({data['id']})")

    print("\n✓ Seed complete.")


if __name__ == "__main__":
    main()
