#!/usr/bin/env python3
import json
import sys
from datetime import date
from pathlib import Path
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable

def gerar_pdf(json_path, pdf_path):
    dados = json.loads(Path(json_path).read_text(encoding="utf-8"))
    
    doc = SimpleDocTemplate(
        str(pdf_path),
        pagesize=letter,
        rightMargin=36,
        leftMargin=36,
        topMargin=36,
        bottomMargin=36
    )
    
    styles = getSampleStyleSheet()
    
    primary_color = colors.HexColor("#1F4E79")
    dark_gray = colors.HexColor("#2C3E50")
    light_bg = colors.HexColor("#F4F6F9")
    accent_color = colors.HexColor("#2980B9")
    
    title_style = ParagraphStyle(
        'DocTitle',
        parent=styles['Heading1'],
        fontName='Helvetica-Bold',
        fontSize=20,
        leading=24,
        textColor=primary_color,
        spaceAfter=4
    )
    
    subtitle_style = ParagraphStyle(
        'DocSubtitle',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=10,
        leading=14,
        textColor=dark_gray
    )
    
    section_title_style = ParagraphStyle(
        'SectionTitle',
        parent=styles['Heading2'],
        fontName='Helvetica-Bold',
        fontSize=12,
        leading=16,
        textColor=primary_color,
        spaceBefore=10,
        spaceAfter=4
    )
    
    label_style = ParagraphStyle(
        'FieldLabel',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=9,
        leading=12,
        textColor=dark_gray
    )
    
    value_style = ParagraphStyle(
        'FieldValue',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=9,
        leading=12,
        textColor=colors.black
    )
    
    story = []
    
    # Header
    story.append(Paragraph("BRANA PROJETOS NAVAIS &bull; ESTALEIRO ESCOLA EMBRIÃO", ParagraphStyle('HeaderTop', fontName='Helvetica-Bold', fontSize=8, leading=10, textColor=accent_color)))
    story.append(Paragraph("Caso de Uso — Requisitos de Projeto de Embarcação", title_style))
    story.append(Paragraph(f"<b>Projetista:</b> {dados.get('projetista', 'N/A')} &nbsp;&nbsp;|&nbsp;&nbsp; <b>Data:</b> {dados.get('data', date.today().strftime('%d/%m/%Y'))} &nbsp;&nbsp;|&nbsp;&nbsp; <b>Embarcação:</b> Saveiro Tradicional de Passeio", subtitle_style))
    story.append(Spacer(1, 8))
    story.append(HRFlowable(width="100%", thickness=1.5, color=primary_color, spaceBefore=2, spaceAfter=8))
    
    secoes = [
        ("1. Missão da Embarcação", [
            ("Uso principal", dados.get("uso_principal")),
            ("Papel mais importante", dados.get("papel_principal")),
        ]),
        ("2. Perfil do Usuário e Lotação", [
            ("Usuário principal", dados.get("usuario_principal")),
            ("Usuário é o proprietário?", dados.get("usuario_e_dono")),
            ("Quem irá pilotar", dados.get("quem_pilota")),
            ("Pernoite", dados.get("pernoite")),
            ("Lotação máxima (dia)", dados.get("tripulantes_max_dia")),
            ("Lotação média", dados.get("tripulantes_medio")),
            ("Acomodações / Conforto", "Sanitário fechado e ampla área de convés / estar"),
            ("Experiência a bordo", dados.get("gosta_caminho")),
        ]),
        ("3. Área de Navegação", [
            ("Região", dados.get("regiao")),
            ("Derrota habitual", dados.get("derrota")),
            ("Condições de vento / mar", dados.get("vento_ondas")),
            ("Regime de chuvas e clima", dados.get("chuvas")),
            ("Restrição de calado", dados.get("restricao_calado")),
            ("Classificação da área", dados.get("restricoes_gerais")),
        ]),
        ("4. Orçamento", [
            ("Orçamento total estimado", dados.get("orcamento_total")),
            ("Manutenção e conservação", dados.get("orcamento_manutencao")),
        ]),
        ("5. Construtor e Método Construtivo", [
            ("Construtor", dados.get("construtor")),
            ("Tipo de construtor", dados.get("tipo_construtor")),
            ("Material de construção", dados.get("material")),
            ("Método construtivo", dados.get("metodo_construcao")),
        ]),
        ("6. Propulsão e Performance", [
            ("Propulsão principal", dados.get("propulsao")),
            ("Armação vélica", dados.get("armacao")),
            ("Motorização auxiliar", dados.get("motorizacao")),
            ("Velocidade esperada", dados.get("performance")),
        ]),
        ("7. Dimensões Principais Recomendadas", [
            ("Comprimento Fora a Fora (LOA)", dados.get("loa")),
            ("Boca Máxima (BOA)", dados.get("boca")),
            ("Pontal Moldado (D)", dados.get("pontal")),
            ("Calado de Projeto (T)", dados.get("calado")),
            ("Justificativa técnica", dados.get("justificativa_dimensoes")),
        ])
    ]
    
    for titulo_secao, campos in secoes:
        story.append(Paragraph(titulo_secao, section_title_style))
        table_data = []
        for rotulo, val in campos:
            val_str = str(val).strip() if val else "N/A"
            p_label = Paragraph(f"<b>{rotulo}</b>", label_style)
            p_val = Paragraph(val_str, value_style)
            table_data.append([p_label, p_val])
        
        t = Table(table_data, colWidths=[160, 380])
        t.setStyle(TableStyle([
            ('VALIGN', (0,0), (-1,-1), 'TOP'),
            ('BOTTOMPADDING', (0,0), (-1,-1), 3),
            ('TOPPADDING', (0,0), (-1,-1), 3),
            ('LEFTPADDING', (0,0), (-1,-1), 4),
            ('RIGHTPADDING', (0,0), (-1,-1), 4),
            ('LINEBELOW', (0,0), (-1,-1), 0.5, colors.HexColor("#E2E8F0")),
        ]))
        story.append(t)
        story.append(Spacer(1, 4))
        
    doc.build(story)
    print(f"PDF gerado com sucesso em: {pdf_path}")

if __name__ == "__main__":
    gerar_pdf(sys.argv[1], sys.argv[2])
