#!/usr/bin/env python3
"""Baixa os 16 criativos IG de referencia da pasta MIA no Drive."""
import json
import os
import requests
from pathlib import Path
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request

TOKENS_PATH = "/opt/mia/config/drive_tokens.json"
FOLDER_ID = "1QDMZKcJwcLbH5523abOpgYot6UBt0Pi_"
DEST = Path("/opt/mia/workspace/clientes/borrello/criativos_ig_referencia")
DEST.mkdir(parents=True, exist_ok=True)


def get_credentials():
    with open(TOKENS_PATH) as f:
        t = json.load(f)
    creds = Credentials(
        token=t.get("access_token") or t.get("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_PATH, "w") as f:
            json.dump(t, f, indent=2)
    return creds


def main():
    creds = get_credentials()
    H = {"Authorization": f"Bearer {creds.token}"}

    # Lista arquivos
    r = requests.get(
        "https://www.googleapis.com/drive/v3/files",
        params={
            "q": f"'{FOLDER_ID}' in parents and trashed=false",
            "fields": "files(id,name,mimeType,size)",
            "pageSize": 100,
        },
        headers=H,
    )
    r.raise_for_status()
    files = r.json().get("files", [])
    print(f"Encontrados {len(files)} arquivos.")

    baixados = []
    for i, f in enumerate(sorted(files, key=lambda x: x["name"]), 1):
        fid = f["id"]
        name = f["name"]
        dest = DEST / name
        if dest.exists() and dest.stat().st_size > 0:
            print(f"[{i}/{len(files)}] SKIP {name}")
            baixados.append(str(dest))
            continue
        print(f"[{i}/{len(files)}] baixando {name}...")
        rr = requests.get(
            f"https://www.googleapis.com/drive/v3/files/{fid}?alt=media",
            headers=H,
            stream=True,
        )
        rr.raise_for_status()
        with open(dest, "wb") as w:
            for chunk in rr.iter_content(chunk_size=1024 * 1024):
                w.write(chunk)
        baixados.append(str(dest))
        print(f"    OK - {dest.stat().st_size/1024:.1f} KB")

    print(f"\n{len(baixados)} arquivos em {DEST}")
    for p in baixados:
        print(f"  - {p}")


if __name__ == "__main__":
    main()
