import os
import re
import requests
import mysql.connector

# Configurações da API Brave
BRAVE_API_KEY = "BSA6H4Mxk5MYO7EDULxri5OnBccAEtP"
BRAVE_ENDPOINT = "https://api.search.brave.com/res/v1/images/search"

# 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)

print("✅ Conectado ao banco:", conn.database)

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

# Debug: mostrar quantidade de produtos encontrados
total = len(produtos)
print(f"🔎 Produtos retornados pela query: {total}")
if total > 0:
    print("➡️ Exemplo do primeiro produto:", produtos[0])

# Contadores
baixadas = 0
erros = 0

headers = {
    "Accept": "application/json",
    "X-Subscription-Token": BRAVE_API_KEY
}

def limpar_nome(nome):
    """Remove códigos, números e símbolos para melhorar a busca"""
    nome = re.sub(r"[0-9/\\-]+", "", nome)  # remove números e /-
    nome = re.sub(r"\s+", " ", nome).strip()  # remove espaços extras
    return nome

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:
        # Primeira tentativa: nome original + "papelaria"
        query = f"{nome_produto} papelaria"

        params = {"q": query, "count": 1, "search_lang": "pt"}
        res = requests.get(BRAVE_ENDPOINT, headers=headers, params=params, timeout=10)
        data = res.json()

        # Se não encontrar, tenta limpar o nome
        if "results" not in data or len(data["results"]) == 0:
            query = f"{limpar_nome(nome_produto)} material escolar"
            params["q"] = query
            res = requests.get(BRAVE_ENDPOINT, headers=headers, params=params, timeout=10)
            data = res.json()

        if "results" not in data or len(data["results"]) == 0:
            print(f"⚠️ Nenhuma imagem encontrada para {nome_produto}")
            erros += 1
            continue

        img_url = data["results"][0]["thumbnail"]["src"]
        if not img_url:
            img_url = data["results"][0]["url"]

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

        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
        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()
