#!/usr/bin/env python3
"""Helpers Meta Marketing API - campanha Mesas Radionicas Borrello."""
import json, os, time, sys
import urllib.request, urllib.parse, urllib.error

API = "https://graph.facebook.com/v21.0"
ACT = "act_517468148842987"
PAGE_ID = "379331292096763"
IG_ID = "17841402883210875"
PIXEL_ID = "464623303880507"

with open("/opt/mia/config/meta_token_renato.txt") as f:
    TOKEN = f.read().strip()

IDS_PATH = "/opt/mia/workspace/clientes/borrello/campanha_mesas_ids.json"


def load_ids():
    if os.path.exists(IDS_PATH):
        with open(IDS_PATH) as f:
            return json.load(f)
    return {"videos": {}, "campaign": None, "adsets": {}, "creatives": {}, "ads": {}}


def save_ids(d):
    with open(IDS_PATH, "w") as f:
        json.dump(d, f, ensure_ascii=False, indent=2)


def post(path, data):
    data = dict(data)
    data["access_token"] = TOKEN
    body = urllib.parse.urlencode(data).encode()
    req = urllib.request.Request(f"{API}/{path}", data=body, method="POST")
    try:
        with urllib.request.urlopen(req) as r:
            return json.loads(r.read().decode())
    except urllib.error.HTTPError as e:
        err = e.read().decode()
        raise RuntimeError(f"POST {path} FAILED: {err}")


def get(path, params=None):
    params = dict(params or {})
    params["access_token"] = TOKEN
    q = urllib.parse.urlencode(params)
    req = urllib.request.Request(f"{API}/{path}?{q}")
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read().decode())


def upload_video(filepath, name):
    """Upload via multipart/form-data (arquivo local)."""
    import mimetypes, uuid
    url = f"{API}/{ACT}/advideos"
    boundary = uuid.uuid4().hex
    with open(filepath, "rb") as f:
        filedata = f.read()
    fname = os.path.basename(filepath)
    parts = []
    def add_field(k, v):
        parts.append(f"--{boundary}\r\n".encode())
        parts.append(f'Content-Disposition: form-data; name="{k}"\r\n\r\n'.encode())
        parts.append(f"{v}\r\n".encode())
    add_field("access_token", TOKEN)
    add_field("name", name)
    parts.append(f"--{boundary}\r\n".encode())
    parts.append(f'Content-Disposition: form-data; name="source"; filename="{fname}"\r\n'.encode())
    parts.append(b"Content-Type: video/mp4\r\n\r\n")
    parts.append(filedata)
    parts.append(b"\r\n")
    parts.append(f"--{boundary}--\r\n".encode())
    body = b"".join(parts)
    req = urllib.request.Request(url, data=body, method="POST")
    req.add_header("Content-Type", f"multipart/form-data; boundary={boundary}")
    try:
        with urllib.request.urlopen(req, timeout=600) as r:
            return json.loads(r.read().decode())
    except urllib.error.HTTPError as e:
        raise RuntimeError(f"UPLOAD {name} FAILED: {e.read().decode()}")
