#!/usr/bin/env python3
"""Upload 4 criativos escalados Angulo E (4x5 e 9x16) pra pasta JA EXISTENTE no Drive."""
import json
import sys
from pathlib import Path
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

CONFIG_DIR = Path("/opt/mia/config")
TOKENS = json.loads((CONFIG_DIR / "drive_tokens.json").read_text())
OAUTH = json.loads((CONFIG_DIR / "oauth_client.json").read_text())["installed"]

# Pasta JA EXISTENTE - NAO criar nova
DESTINO_ID = "1cdf3mCX3cE2nnRpwaBV-3LWHRXCiTHNE"

creds = Credentials(
    token=TOKENS.get("token"),
    refresh_token=TOKENS.get("refresh_token"),
    token_uri=TOKENS.get("token_uri", OAUTH["token_uri"]),
    client_id=TOKENS.get("client_id", OAUTH["client_id"]),
    client_secret=TOKENS.get("client_secret", OAUTH["client_secret"]),
    scopes=TOKENS.get("scopes", ["https://www.googleapis.com/auth/drive"]),
)
if not creds.valid:
    creds.refresh(Request())
    data = json.loads((CONFIG_DIR / "drive_tokens.json").read_text())
    data["token"] = creds.token
    (CONFIG_DIR / "drive_tokens.json").write_text(json.dumps(data, indent=2))

svc = build("drive", "v3", credentials=creds, cache_discovery=False)

# Confirmar que a pasta existe
try:
    folder_meta = svc.files().get(fileId=DESTINO_ID, fields="id,name,parents").execute()
    print(f"[folder] {folder_meta['name']} id={folder_meta['id']}", file=sys.stderr)
except Exception as e:
    print(f"[ERROR] folder {DESTINO_ID} not accessible: {e}", file=sys.stderr)
    sys.exit(1)

base = Path("/opt/mia/workspace/clientes/px3lab/lancamento_photorf2/criativos_oferta")
UPLOADS = [
    (base / "piloto_06_E_opcao1_layoutA_crop_4x5.png",  "cloudphotorf2_oferta_E_handshake_4x5.png"),
    (base / "piloto_06_E_opcao1_layoutA_crop_9x16.png", "cloudphotorf2_oferta_E_handshake_9x16.png"),
    (base / "piloto_06_E_opcao3_formando_4x5.png",      "cloudphotorf2_oferta_E_formando_4x5.png"),
    (base / "piloto_06_E_opcao3_formando_9x16.png",     "cloudphotorf2_oferta_E_formando_9x16.png"),
]

uploaded = []
errors = []
for src, final_name in UPLOADS:
    if not src.exists():
        err = f"source missing: {src}"
        print(f"[skip] {err}", file=sys.stderr)
        errors.append({"file": final_name, "error": err})
        continue
    try:
        media = MediaFileUpload(str(src), mimetype="image/png", resumable=False)
        body = {"name": final_name, "parents": [DESTINO_ID]}
        f = svc.files().create(body=body, media_body=media,
                               fields="id,name,webViewLink,size,parents").execute()
        uploaded.append(f)
        print(f"[uploaded] {final_name} id={f['id']}", file=sys.stderr)
    except Exception as e:
        err = f"upload failed: {e}"
        print(f"[ERROR] {final_name}: {err}", file=sys.stderr)
        errors.append({"file": final_name, "error": str(e)})

folder_url = f"https://drive.google.com/drive/folders/{DESTINO_ID}"
result = {
    "folder_id": DESTINO_ID,
    "folder_name": folder_meta["name"],
    "folder_url": folder_url,
    "uploaded_count": len(uploaded),
    "files": [
        {"id": f["id"], "name": f["name"], "size": f.get("size"),
         "parents": f.get("parents"), "webViewLink": f.get("webViewLink")}
        for f in uploaded
    ],
    "errors": errors,
}
print(json.dumps(result, indent=2, ensure_ascii=False))
