import os
import requests
import mysql.connector
from googleapiclient.discovery import build

# Configurações da API Google
API_KEY = "AIzaSyA8broxtsl1HKQi4o-NbA5Ontc81xptToY"
CX_ID = "73f5ae8ec1a5045a9"

# Pasta para salvar imagens
PASTA_IMAGENS = "imagens"
os.makedirs(PASTA_IMAGENS, exist_ok=True)

# Conexão com o banco
conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="",
    database="delivery"
)
cursor = conn.cursor(dictionary=True)

# Pega somente os produtos SEM foto
cursor.execute("SELECT id, nome FROM produtos WHERE foto IS NULL OR foto = ''")
produtos = cursor.fetchall()

# Inicializa cliente da API
service = build("customsearch", "v1", developerKey=API_KEY)

# Contadores
total = len(produtos)
baixadas = 0
erros = 0

for idx, p in enumerate(produtos, start=1):
    produto_id = p["id"]
    nome_produto = p["nome"]

    print(f"[{idx}/{total}] 🔎 Buscando imagem para: {nome_produto}")

    try:
        res = service.cse().list(
            q=nome_produto,
            cx=CX_ID,
            searchType="image",
            num=1
        ).execute()

        if "items" not in res:
            print(f"⚠️ Nenhuma imagem encontrada para {nome_produto}")
            erros += 1
            continue

        img_url = res["items"][0]["link"]
        ext = img_url.split(".")[-1].split("?")[0]
        if len(ext) > 4:
            ext = "jpg"

        # Nome do arquivo local (somente nome, sem caminho)
        filename = f"{produto_id}.{ext}"
        filepath = os.path.join(PASTA_IMAGENS, filename)

        # Baixa a imagem
        r = requests.get(img_url, timeout=10)
        with open(filepath, "wb") as f:
            f.write(r.content)

        # Atualiza no banco (salva só o nome do arquivo)
        cursor.execute(
            "UPDATE produtos SET foto = %s WHERE id = %s",
            (filename, produto_id)
        )
        conn.commit()

        print(f"✅ Imagem salva: {filepath}")
        baixadas += 1

    except Exception as e:
        print(f"❌ Erro com {nome_produto}: {e}")
        erros += 1

print(f"\n🏁 Concluído! Total: {total}, Baixadas: {baixadas}, Erros: {erros}")

cursor.close()
conn.close()
