#!/usr/bin/env python3
"""Upload 2 criativos aprovados Angulo E (terceirizacao) pro Drive do Renato."""
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"]
CFG = json.loads((CONFIG_DIR / "drive_config.json").read_text())

MIA_ROOT = CFG["mia_root"]  # 1F-0M5zBPDVTjQh3QIQFc0pIcQUuDX0hE
PARENT_CAMPANHA_ID = "1j_cVYg1FFt-azmP3-7RagrRdQCDdV7T4"

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())
    # persist refreshed token
    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)


def find_or_create_folder(name: str, parent_id: str) -> str:
    q = (
        f"'{parent_id}' in parents and name = '{name}' "
        f"and mimeType = 'application/vnd.google-apps.folder' and trashed = false"
    )
    r = svc.files().list(q=q, fields="files(id,name)", pageSize=5).execute()
    files = r.get("files", [])
    if files:
        print(f"[found] {name} -> {files[0]['id']}", file=sys.stderr)
        return files[0]["id"]
    body = {
        "name": name,
        "mimeType": "application/vnd.google-apps.folder",
        "parents": [parent_id],
    }
    f = svc.files().create(body=body, fields="id,name").execute()
    print(f"[created] {name} -> {f['id']}", file=sys.stderr)
    return f["id"]


destino_id = find_or_create_folder("Criativos Aprovados - Angulo E", PARENT_CAMPANHA_ID)

base = Path("/opt/mia/workspace/clientes/px3lab/lancamento_photorf2/criativos_oferta")
UPLOADS = [
    (base / "piloto_06_E_opcao1_layoutA_crop.png", "cloudphotorf2_oferta_E_handshake_1x1.png"),
    (base / "piloto_06_E_opcao3_formando_1x1.png", "cloudphotorf2_oferta_E_formando_1x1.png"),
]

uploaded = []
for src, final_name in UPLOADS:
    if not src.exists():
        print(f"[skip] source missing: {src}", file=sys.stderr)
        continue
    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").execute()
    uploaded.append(f)
    print(f"[uploaded] {final_name} id={f['id']}", file=sys.stderr)

folder_url = f"https://drive.google.com/drive/folders/{destino_id}"
result = {
    "folder_id": destino_id,
    "folder_url": folder_url,
    "parent_campanha_id": PARENT_CAMPANHA_ID,
    "files": [
        {"id": f["id"], "name": f["name"], "webViewLink": f.get("webViewLink")}
        for f in uploaded
    ],
}
print(json.dumps(result, indent=2, ensure_ascii=False))
