#!/usr/bin/env python3
"""Cek akses Meta Graph API: daftar Page, akun Instagram yang tersambung, dan insight dasar.

Cara pakai:
    export META_ACCESS_TOKEN="EAAG..."      # token dari System User atau Graph API Explorer
    python3 ss_meta_cek.py

Token juga bisa ditaruh di ~/.hermes/profiles/atun/.env sebagai META_ACCESS_TOKEN=...
"""
import json
import os
import sys
import urllib.parse
import urllib.request
import urllib.error

VERSI = "v21.0"
BASE = f"https://graph.facebook.com/{VERSI}"


def token():
    t = os.environ.get("META_ACCESS_TOKEN")
    if t:
        return t.strip()
    for jalur in (os.path.expanduser("~/.hermes/profiles/atun/.env"), os.path.expanduser("~/.hermes/.env")):
        try:
            for baris in open(jalur):
                if baris.startswith("META_ACCESS_TOKEN="):
                    return baris.split("=", 1)[1].strip().strip('"').strip("'")
        except FileNotFoundError:
            continue
    print("Token belum ada. Set META_ACCESS_TOKEN dulu.")
    sys.exit(1)


TOKEN = token()


def get(path, **params):
    params["access_token"] = TOKEN
    url = f"{BASE}/{path}?{urllib.parse.urlencode(params)}"
    try:
        with urllib.request.urlopen(url, timeout=60) as x:
            return json.loads(x.read())
    except urllib.error.HTTPError as e:
        return {"__error": e.code, "pesan": e.read().decode()[:300]}
    except Exception as e:
        return {"__error": "koneksi", "pesan": str(e)[:200]}


print("=== 1. Cek token ===")
me = get("me", fields="id,name")
if "__error" in me:
    print("  GAGAL:", me)
    sys.exit(1)
print(f"  token milik: {me.get('name')} (id {me.get('id')})")

print("\n=== 2. Page yang bisa diakses ===")
halaman = get("me/accounts", fields="id,name,fan_count,followers_count,category", limit=100)
data = halaman.get("data", [])
if not data:
    print("  (kosong)", str(halaman)[:200])
for p in data:
    print(f"  {p['name'][:42]:<44} id={p['id']:<18} follower={p.get('followers_count', p.get('fan_count','?'))}")

print("\n=== 3. Akun Instagram yang tersambung ke tiap Page ===")
ig_map = {}
for p in data:
    r = get(p["id"], fields="instagram_business_account{id,username,followers_count,media_count}")
    ig = r.get("instagram_business_account")
    if ig:
        ig_map[ig["id"]] = ig
        print(f"  {p['name'][:36]:<38} → IG @{ig.get('username')} | follower {ig.get('followers_count')} | media {ig.get('media_count')}")
    else:
        print(f"  {p['name'][:36]:<38} → (tidak ada akun IG tersambung / bukan Business)")

print("\n=== 4. Postingan terakhir tiap akun IG ===")
for ig_id, ig in ig_map.items():
    print(f"\n  @{ig.get('username')}:")
    media = get(f"{ig_id}/media", fields="id,caption,permalink,like_count,comments_count,timestamp,media_type", limit=5)
    for m in media.get("data", []):
        cap = (m.get("caption") or "").replace("\n", " ")[:60]
        print(f"    {m.get('timestamp','')[:10]} | like {m.get('like_count','-')} | komentar {m.get('comments_count','-')} | {cap}")
    if not media.get("data"):
        print("     (tidak ada data)", str(media)[:160])

print("\n=== 5. Insight dasar ===")
for ig_id, ig in ig_map.items():
    r = get(f"{ig_id}/insights", metric="reach,profile_views", period="day")
    if "__error" in r:
        print(f"  @{ig.get('username')}: insight tidak tersedia ({r.get('pesan','')[:90]})")
        continue
    for x in r.get("data", []):
        nilai = x.get("values", [{}])[-1].get("value") if x.get("values") else "-"
        print(f"  @{ig.get('username')} {x.get('name')}: {nilai}")
