import smtplib
import requests
from email.message import EmailMessage
from config import SMTP_CONFIG, ZAPI_CONFIG
from utils.logger import registrar_log

# === ENVIO DE EMAIL ===
def send_email(to_email, customer_name, cart_info):
    msg = EmailMessage()
    msg["Subject"] = "Você esqueceu algo no carrinho!"
    msg["From"] = SMTP_CONFIG["from"]
    msg["To"] = to_email

    html_content = f"""
    <html>
      <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
        <h2 align="center" style="color: #1a73e8;">Olá {customer_name},</h2>
        <p align="center">Notamos que você deixou produtos no seu carrinho na <strong>Lumix Pro</strong>:</p>
        <div align="center">
          <img src="{cart_info['imagem']}" alt="Imagem do produto" style="max-width: 300px; border: 1px solid #ccc; padding: 5px; margin: 10px 0;" />
          <ul style="list-style: none; padding: 0;">
            <li><strong>Produtos:</strong> {cart_info['produtos']}</li>
            <li><strong>Valor total:</strong> {cart_info['valor']}</li>
          </ul>
        </div>
        <p align="center">
          👉 <a href="{cart_info['url']}" style="background-color: #1a73e8; color: white; padding: 10px 15px; text-decoration: none; border-radius: 4px;">Clique aqui para finalizar sua compra</a>
        </p>
        <p align="center">Se tiver qualquer dúvida, estamos à disposição.</p>
        <p align="center" style="margin-top: 30px;">
          Atenciosamente,<br>
          <strong>Equipe Lumix Pro</strong>
        </p>
      </body>
    </html>
    """

    msg.set_content("Olá, você deixou produtos no carrinho. Veja a versão em HTML do e-mail.")
    msg.add_alternative(html_content, subtype='html')

    try:
        with smtplib.SMTP(SMTP_CONFIG["host"], SMTP_CONFIG["port"]) as server:
            server.starttls()
            server.login(SMTP_CONFIG["user"], SMTP_CONFIG["password"])
            server.send_message(msg)
        registrar_log(f"[EMAIL] Enviado para: {to_email}")
    except Exception as e:
        registrar_log(f"[EMAIL] ERRO ao enviar para {to_email}: {e}")

# === FORMATADOR DE TELEFONE ===
def formatar_numero_br(numero_br):
    digitos = "".join(filter(str.isdigit, numero_br))
    if len(digitos) == 11:
        return f"+55{digitos}"
    elif len(digitos) == 10:
        return f"+55{digitos[0:2]}9{digitos[2:]}"
    return None

# === CORRETOR DE URL ===
def corrigir_url(url):
    if url.count("?") > 1:
        primeira, *resto = url.split("?")
        return primeira + "?" + "&".join(resto)
    return url

# === ENVIO DE WHATSAPP COM LINK CLICÁVEL ===
def send_whatsapp_link(to_phone, customer_name, cart_info):
    numero = formatar_numero_br(to_phone)
    if not numero:
        registrar_log(f"[WHATSAPP] ERRO: Número inválido: {to_phone}")
        return

    url_corr = corrigir_url(cart_info["url"])

    payload = {
        "phone": numero.replace("+", ""),
        "message": f"Olá {customer_name}, finalize sua compra aqui: {url_corr}",
        "image": cart_info.get("imagem"),
        "linkUrl": url_corr,
        "title": "Finalize sua compra na Lumix Pro",
        "linkDescription": "Clique aqui para concluir seu pedido com segurança"
    }

    url = f"https://api.z-api.io/instances/{ZAPI_CONFIG['instance_id']}/token/{ZAPI_CONFIG['token']}/send-link"
    headers = {
        "Content-Type": "application/json",
        "Client-Token": ZAPI_CONFIG["client_token"]
    }

    try:
        print("[DEBUG] URL:", url)
        print("[DEBUG] HEADERS:", headers)
        print("[DEBUG] PAYLOAD:", payload)

        response = requests.post(url, json=payload, headers=headers)
        res_data = response.json()

        if response.status_code == 200 and not res_data.get("error"):
            registrar_log(f"[WHATSAPP LINK] Enviado para: {to_phone}")
        else:
            registrar_log(f"[WHATSAPP LINK] ERRO para {numero}: {res_data}")
    except Exception as e:
        registrar_log(f"[WHATSAPP LINK] EXCEPTION para {numero}: {e}")
