#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Upload dos 5 artigos para o Google Drive.
Estrutura: PASTA DA MIA > Borrello > Blog > 01_Para_Revisao > artigos_v1_2026-09-18
"""

import json
import os
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

TOKENS_PATH = '/opt/mia/config/drive_tokens.json'
CLIENT_PATH = '/opt/mia/config/oauth_client.json'
BORRELLO_FOLDER_ID = '1a9fQeMsIdQtFeP-hpOmzDeSzGXqOcxvn'
ARTIGOS_DIR = '/opt/mia/workspace/clientes/borrello/blog/artigos_v1_2026-09-18'

ARTIGOS = [
    '01_feng_shui_entrada_casa.docx',
    '02_feng_shui_quarto.docx',
    '03_plantas_feng_shui.docx',
    '04_5_animais_celestiais.docx',
    '05_bagua_mapa_casa.docx',
]

MIME_DOCX = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'


def get_service():
    with open(TOKENS_PATH) as f:
        tokens = json.load(f)
    with open(CLIENT_PATH) as f:
        client_data = json.load(f)['installed']

    creds = Credentials(
        token=tokens.get('access_token'),
        refresh_token=tokens.get('refresh_token'),
        token_uri='https://oauth2.googleapis.com/token',
        client_id=client_data['client_id'],
        client_secret=client_data['client_secret'],
        scopes=['https://www.googleapis.com/auth/drive']
    )

    if creds.expired and creds.refresh_token:
        creds.refresh(Request())
        tokens['access_token'] = creds.token
        with open(TOKENS_PATH, 'w') as f:
            json.dump(tokens, f)
        print("Token renovado.")

    return build('drive', 'v3', credentials=creds)


def get_or_create_folder(service, name, parent_id):
    """Retorna ID da pasta (cria se não existir)."""
    query = (
        f"name='{name}' and "
        f"'{parent_id}' in parents and "
        f"mimeType='application/vnd.google-apps.folder' and "
        f"trashed=false"
    )
    results = service.files().list(q=query, fields='files(id, name)').execute()
    files = results.get('files', [])
    if files:
        folder_id = files[0]['id']
        print(f"Pasta existente: '{name}' ({folder_id})")
        return folder_id

    # Cria a pasta
    meta = {
        'name': name,
        'mimeType': 'application/vnd.google-apps.folder',
        'parents': [parent_id]
    }
    folder = service.files().create(body=meta, fields='id').execute()
    folder_id = folder['id']
    print(f"Pasta criada: '{name}' ({folder_id})")
    return folder_id


def upload_file(service, local_path, filename, parent_id):
    media = MediaFileUpload(local_path, mimetype=MIME_DOCX)
    meta = {
        'name': filename,
        'parents': [parent_id]
    }
    file = service.files().create(
        body=meta,
        media_body=media,
        fields='id, webViewLink'
    ).execute()
    print(f"Upload OK: {filename} -> {file.get('webViewLink')}")
    return file


def main():
    service = get_service()

    # Cria hierarquia de pastas
    blog_id = get_or_create_folder(service, 'Blog', BORRELLO_FOLDER_ID)
    revisao_id = get_or_create_folder(service, '01_Para_Revisao', blog_id)
    leva_id = get_or_create_folder(service, 'artigos_v1_2026-09-18', revisao_id)

    # Faz upload de cada artigo
    uploaded = []
    for fname in ARTIGOS:
        local_path = os.path.join(ARTIGOS_DIR, fname)
        if not os.path.exists(local_path):
            print(f"ARQUIVO NAO ENCONTRADO: {local_path}")
            continue
        file_info = upload_file(service, local_path, fname, leva_id)
        uploaded.append((fname, file_info.get('webViewLink', '')))

    # Link da pasta
    pasta_link = f"https://drive.google.com/drive/folders/{leva_id}"
    print(f"\nPasta no Drive: {pasta_link}")
    print(f"ID da pasta: {leva_id}")

    # Resumo
    print("\n--- RESUMO DE UPLOADS ---")
    for fname, link in uploaded:
        print(f"  {fname}: {link}")

    return leva_id, pasta_link, uploaded


if __name__ == '__main__':
    folder_id, folder_url, files = main()
    print(f"\nLink da pasta para o Renato: {folder_url}")
