from playwright.sync_api import sync_playwright
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from PIL import Image
import os
import unicodedata

# Configurações
base_url   = "https://atende.grfgraph.com.br"
output_dir = "/var/www/html/atendegrf/prints"
pdf_path   = "/var/www/html/atendegrf/relatorio_telas_atendegrf.pdf"
os.makedirs(output_dir, exist_ok=True)

# Rotas a capturar
rotas = [
    (f"{base_url}/atendimento/",                                      "Painel do Dono",              "Mostra pedidos recentes, resumo de vendas e mensagens."),
    (f"{base_url}/atendimento/produtos/",                              "Listagem de Produtos",        "Visualiza os produtos cadastrados com opções de edição."),
    (f"{base_url}/atendimento/cardapio/pdf/",                          "Cardápio em PDF",             "Mostra visualmente a geração do PDF do cardápio."),
    (f"{base_url}/atendimento/identidade/",                            "Identidade do Restaurante",   "Permite configurar nome, logotipo e dados da loja."),
    (f"{base_url}/atendimento/produtos/novo/",                         "Cadastro de Produto",         "Formulário para adicionar novos itens ao cardápio."),
    (f"{base_url}/atendimento/delivery/delevery-matozinhos/pedido/",   "Pedido Público",              "Tela pública onde o cliente monta e envia seu pedido."),
    (f"{base_url}/atendimento/delivery/delevery-matozinhos/pedido/enviar/",  "Envio de Pedido",     "Simula envio de pedido."),
    (f"{base_url}/atendimento/delivery/delevery-matozinhos/pedido/acompanhar/PED4F7F8A/", "Acompanhamento de Pedido", "Mostra status atual do pedido."),
    (f"{base_url}/atendimento/vendas-registradas/",                    "Vendas Registradas",          "Apresenta relatório e gráficos das vendas concluídas.")
]

def normalizar_nome(titulo: str) -> str:
    # Remove acentos e espaços para nome de arquivo
    nf = unicodedata.normalize('NFKD', titulo).encode('ascii','ignore').decode('ascii')
    return nf.replace(" ", "_").lower()

def desenhar_capa(c: canvas.Canvas):
    # Insere a descrição comercial na capa
    texto = """
🧠 Apresentação Institucional – AtendeGRF

🔍 O que é o AtendeGRF?
O AtendeGRF é uma plataforma digital completa desenvolvida para automatizar o atendimento, os pedidos e as vendas de restaurantes, lanchonetes, pizzarias, hamburguerias, açaíterias e demais estabelecimentos de delivery.

Ela une cardápio digital, sistema de pedidos, painel de controle e inteligência de atendimento via WhatsApp, em uma experiência moderna, eficiente e 100% online, acessível até por celulares básicos.

🎯 Qual o objetivo?
Transformar o atendimento informal via WhatsApp em um sistema de vendas inteligente, fácil de usar e com resultados reais. O AtendeGRF busca:
- Organizar os pedidos recebidos por canal digital
- Reduzir tempo de resposta ao cliente
- Evitar erros no atendimento
- Aumentar o controle sobre os produtos vendidos
- Oferecer relatórios e indicadores de desempenho
- Atender com qualidade e escala, mesmo sem equipe grande

🛠️ Funcionalidades completas
📲 Cardápio Digital Público
📄 Geração de Cardápio em PDF
✏️ Gestão de Produtos
📈 Dashboard de Vendas
🔐 Multitenancy
💬 Integração com WhatsApp

🧠 Diferenciais Estratégicos
✅ Interface para usuários leigos
✅ Funciona em qualquer celular simples
✅ Painéis independentes por loja
✅ IA planejada para atendimento automatizado

👤 Público-alvo
Restaurantes, pizzarias, hamburguerias, açaíterias e pequenos negócios de delivery.

🚀 Pronto para escalar como SaaS em minutos!
"""
    c.setFont("Helvetica-Bold", 20)
    c.drawCentredString(A4[0]/2, A4[1]-2*cm, "Apresentação Institucional")
    c.setFont("Helvetica", 12)
    text = c.beginText(2*cm, A4[1]-3*cm)
    for linha in texto.strip().split("\n"):
        text.textLine(linha)
    c.drawText(text)
    c.showPage()

def inserir_imagem(c: canvas.Canvas, path: str, comentario: str, titulo: str, url: str, pagina: int):
    try:
        img = Image.open(path)
        w_img, h_img = img.size
        aspect = h_img / w_img

        max_w = A4[0] - 4*cm
        max_h = A4[1] - 8*cm
        w = min(max_w, max_h / aspect)
        h = w * aspect

        x = (A4[0] - w) / 2
        y = (A4[1] - h) / 2 - cm

        # Título e URL
        c.setFont("Helvetica-Bold", 16)
        c.drawString(2*cm, A4[1]-2.5*cm, f"{pagina}. {titulo}")
        c.setFont("Helvetica", 10)
        c.drawString(2*cm, A4[1]-3.5*cm, f"🔗 {url}")
        c.setFont("Helvetica-Oblique", 10)
        c.drawString(2*cm, A4[1]-4.0*cm, f"💬 {comentario}")

        # Imagem
        c.drawImage(path, x, y, width=w, height=h)

        # Rodapé
        c.setFont("Helvetica", 8)
        c.drawRightString(A4[0]-2*cm, 1.5*cm, f"Página {pagina}")
        c.showPage()
    except Exception as e:
        print(f"Erro ao inserir {path}: {e}")

# 1) Captura de telas
with sync_playwright() as pw:
    browser = pw.chromium.launch(headless=True)
    page = browser.new_page()
    print("🔐 Fazendo login...")
    page.goto(f"{base_url}/login/")
    page.fill('input#username', "grf2")
    page.fill('input#password', "grf")
    page.click('input[type="submit"]')
    page.wait_for_load_state("networkidle")

    for url, titulo, comentario in rotas:
        nome = normalizar_nome(titulo)
        img_path = os.path.join(output_dir, f"{nome}.png")
        try:
            print(f"📸 Capturando {titulo}...")
            page.goto(url, timeout=20000)
            page.wait_for_load_state("networkidle")
            page.screenshot(path=img_path, full_page=True)
        except Exception as e:
            print(f"❌ Falha em {url}: {e}")
    browser.close()

# 2) Geração do PDF
c = canvas.Canvas(pdf_path, pagesize=A4)
desenhar_capa(c)

pagina = 1
for url, titulo, comentario in rotas:
    nome = normalizar_nome(titulo)
    img_path = os.path.join(output_dir, f"{nome}.png")
    if os.path.exists(img_path):
        inserir_imagem(c, img_path, comentario, titulo, url, pagina)
        pagina += 1
    else:
        print(f"⚠️ Imagem ausente: {nome}.png")

c.save()
print(f"\n✅ PDF completo gerado em: {pdf_path}")
