#!/usr/bin/env python3
"""Sobe criativos v3 (C1, C4, C5 refeitos com imagens realistas) no Drive.
Estrutura: PASTA DA MIA > Borrello > Criativos_IG > 01_Para_Aprovacao > v3_2026-09-18/
  > estaticos_v3/
"""
import json
import os
import requests
from pathlib import Path
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request

TOKENS = "/opt/mia/config/drive_tokens.json"
MIA_ROOT = "1F-0M5zBPDVTjQh3QIQFc0pIcQUuDX0hE"

with open(TOKENS) as f:
    t = json.load(f)
creds = Credentials(
    token=t.get("access_token"),
    refresh_token=t.get("refresh_token"),
    token_uri=t.get("token_uri", "https://oauth2.googleapis.com/token"),
    client_id=t.get("client_id"),
    client_secret=t.get("client_secret"),
    scopes=t.get("scopes", ["https://www.googleapis.com/auth/drive"]),
)
if not creds.valid:
    creds.refresh(Request())
    t["access_token"] = creds.token
    t["token"] = creds.token
    with open(TOKENS, "w") as f:
        json.dump(t, f, indent=2)
H = {"Authorization": f"Bearer {creds.token}"}


def get_or_create_folder(name, parent):
    q = f"'{parent}' in parents and name = '{name}' and mimeType = 'application/vnd.google-apps.folder' and trashed = false"
    r = requests.get(
        "https://www.googleapis.com/drive/v3/files",
        params={"q": q, "fields": "files(id,name)"},
        headers=H,
    )
    files = r.json().get("files", [])
    if files:
        print(f"  ja existe: {name} ({files[0]['id']})")
        return files[0]["id"]
    metadata = {"name": name, "parents": [parent], "mimeType": "application/vnd.google-apps.folder"}
    r = requests.post("https://www.googleapis.com/drive/v3/files", headers=H, json=metadata)
    r.raise_for_status()
    fid = r.json()["id"]
    print(f"  criei: {name} ({fid})")
    return fid


def upload(path, parent):
    name = os.path.basename(path)
    q = f"'{parent}' in parents and name = '{name}' and trashed = false"
    r = requests.get(
        "https://www.googleapis.com/drive/v3/files",
        params={"q": q, "fields": "files(id,name)"},
        headers=H,
    )
    files = r.json().get("files", [])
    if files:
        for f in files:
            requests.delete(f"https://www.googleapis.com/drive/v3/files/{f['id']}", headers=H)
        print(f"  substituindo {name}...")
    mime = "image/png" if path.endswith(".png") else "text/markdown" if path.endswith(".md") else "text/plain"
    metadata = {"name": name, "parents": [parent]}
    files = {
        "data": ("metadata", json.dumps(metadata), "application/json"),
        "file": (name, open(path, "rb"), mime),
    }
    r = requests.post(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
        headers=H,
        files=files,
    )
    r.raise_for_status()
    fid = r.json()["id"]
    print(f"  upload OK: {name}")
    return fid


print("Montando estrutura no Drive...")
f_borrello = get_or_create_folder("Borrello", MIA_ROOT)
f_criativos = get_or_create_folder("Criativos_IG", f_borrello)
f_aprovacao = get_or_create_folder("01_Para_Aprovacao", f_criativos)
f_v3 = get_or_create_folder("v3_2026-09-18", f_aprovacao)
f_estaticos = get_or_create_folder("estaticos_v3", f_v3)
f_bases = get_or_create_folder("imagens_base", f_v3)

BASE = Path("/opt/mia/workspace/clientes/borrello/criativos_ig_teste_v3_2026-09-18")

print("\nUpload estaticos v3:")
for p in sorted((BASE / "estaticos_v3").glob("*.png")):
    upload(str(p), f_estaticos)

print("\nUpload imagens_base (gpt-image-2 originals + recorte Borrello):")
for p in sorted((BASE / "imagens_base").glob("*.png")):
    upload(str(p), f_bases)

print(f"\nDONE. Link v3: https://drive.google.com/drive/folders/{f_v3}")
