import json
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4, landscape
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm

def gerar_pdf_similares_fao(pdf_path):
    doc = SimpleDocTemplate(
        pdf_path,
        pagesize=landscape(A4),
        leftMargin=1.5*cm,
        rightMargin=1.5*cm,
        topMargin=1.5*cm,
        bottomMargin=1.5*cm
    )
    
    styles = getSampleStyleSheet()
    azul_brana = colors.HexColor('#002B49')
    cinza_fundo = colors.HexColor('#F4F6F8')
    cinza_borda = colors.HexColor('#D1D5DB')
    texto_escuro = colors.HexColor('#1F2937')
    
    title_style = ParagraphStyle(
        'DocTitle', parent=styles['Heading1'],
        fontName='Helvetica-Bold', fontSize=16, leading=20,
        textColor=azul_brana, spaceAfter=2
    )
    sub_style = ParagraphStyle(
        'DocSub', parent=styles['Normal'],
        fontName='Helvetica', fontSize=9, leading=12,
        textColor=colors.HexColor('#4B5563')
    )
    h2_style = ParagraphStyle(
        'DocH2', parent=styles['Heading2'],
        fontName='Helvetica-Bold', fontSize=11, leading=14,
        textColor=azul_brana, spaceBefore=8, spaceAfter=4
    )
    body_style = ParagraphStyle(
        'DocBody', parent=styles['Normal'],
        fontName='Helvetica', fontSize=8, leading=11,
        textColor=texto_escuro
    )
    table_hdr = ParagraphStyle(
        'TableHdr', parent=styles['Normal'],
        fontName='Helvetica-Bold', fontSize=7.5, leading=9,
        textColor=colors.white, alignment=1
    )
    table_cell = ParagraphStyle(
        'TableCell', parent=styles['Normal'],
        fontName='Helvetica', fontSize=7.5, leading=9,
        textColor=texto_escuro, alignment=1
    )
    table_cell_bold = ParagraphStyle(
        'TableCellBold', parent=styles['Normal'],
        fontName='Helvetica-Bold', fontSize=7.5, leading=9,
        textColor=azul_brana, alignment=1
    )
    table_param = ParagraphStyle(
        'TableParam', parent=styles['Normal'],
        fontName='Helvetica-Bold', fontSize=7.5, leading=9,
        textColor=azul_brana
    )

    story = []
    
    # Cabeçalho
    story.append(Paragraph("ESTUDO DE SIMILARES — PROJETO II: BOTE DE APOIO PESQUEIRO (5,80 m)", title_style))
    story.append(Paragraph("<b>Projetista:</b> Carlos Silva | <b>Instituição:</b> Estaleiro Escola Embrião (EEE) / Brana Projetos Navais | <b>Data:</b> 15/09/2026", sub_style))
    story.append(Spacer(1, 0.2*cm))
    story.append(HRFlowable(width="100%", thickness=1.5, color=azul_brana, spaceBefore=2, spaceAfter=6))
    
    # Tabela Comparativa Completa
    headers = [
        Paragraph("<b>Parâmetro / Variável</b>", table_hdr),
        Paragraph("<b>FAO NC-18<br/>(Gulbrandsen)</b>", table_hdr),
        Paragraph("<b>Yamaha Panga 19<br/>(Pesqueiro Trad.)</b>", table_hdr),
        Paragraph("<b>Bateira Baiana 5.8m<br/>(Regional BTS)</b>", table_hdr),
        Paragraph("<b>Carolina Skiff 19<br/>(Utilitário)</b>", table_hdr),
        Paragraph("<b>FAO KIR-10 6m<br/>(Pesca Costeira)</b>", table_hdr),
        Paragraph("<b>Levefort Marajó 19<br/>(Ref. Alumínio)</b>", table_hdr),
        Paragraph("<b>MÉDIA DOS<br/>SIMILARES</b>", table_hdr),
        Paragraph("<b>PROJETO II<br/>(Bote 5.8m)</b>", table_hdr)
    ]
    
    t_data = [headers]
    
    # Dados dos barcos
    # Colunas: Param, NC18, Panga19, Bateira58, Carol19, KIR10, Marajo19, Media, Projeto
    rows = [
        ("LOA (Comprimento Total)", "5,50 m", "5,80 m", "5,80 m", "5,75 m", "6,00 m", "5,85 m", "5,78 m", "5,80 m"),
        ("LWL (Linha d'Água)", "5,05 m", "5,30 m", "5,40 m", "5,15 m", "5,55 m", "5,20 m", "5,28 m", "5,35 m"),
        ("BOA (Boca Máxima)", "1,70 m", "1,82 m", "1,65 m", "2,15 m", "1,80 m", "1,85 m", "1,83 m", "1,85 m"),
        ("Calado do Casco (T)", "0,18 m", "0,18 m", "0,16 m", "0,18 m", "0,20 m", "0,22 m", "0,19 m", "0,18 m"),
        ("Deslocamento Carregado (Δ)", "650 kg", "750 kg", "600 kg", "950 kg", "800 kg", "780 kg", "755 kg", "720 kg"),
        ("Peso Casco Vazio (Lightship)", "110 kg", "190 kg", "140 kg", "380 kg", "160 kg", "230 kg", "202 kg", "145 kg"),
        ("Capacidade de Carga Útil", "540 kg", "560 kg", "460 kg", "570 kg", "640 kg", "550 kg", "553 kg", "575 kg"),
        ("Potência Instalada Nominal", "15 HP", "25 HP", "15 HP", "40 HP", "25 HP", "40 HP", "27 HP", "15 a 30 HP"),
        ("Área Vélica Auxiliar (se houver)", "10,5 m²", "—", "12,0 m²", "—", "11,5 m²", "—", "11,3 m²", "11,0 m²"),
        ("Velocidade Máxima Estimada", "18 nós", "22 nós", "17 nós", "26 nós", "21 nós", "27 nós", "21,8 nós", "22,0 nós"),
        ("Velocidade Cruzeiro (Semi-Plan.)", "13 nós", "16 nós", "12 nós", "19 nós", "15 nós", "20 nós", "15,8 nós", "15,0 nós"),
        ("— RAZÕES ADIMENSIONAIS —", "", "", "", "", "", "", "", ""),
        ("BOA / LOA (Boca / Comprimento)", "0,31", "0,31", "0,28", "0,37", "0,30", "0,32", "0,315", "0,319"),
        ("DLR (Desloc.-Comprimento)", "141,6", "140,8", "106,7", "194,5", "130,9", "155,1", "144,9", "131,8"),
        ("SLR em Cruzeiro (Vk / √LWLft)", "3,20", "3,84", "2,85", "4,62", "3,52", "4,84", "3,81", "3,58"),
        ("SA / D (Área Vélica / Desloc.)", "14,2", "—", "17,1", "—", "13,5", "—", "14,9", "14,8"),
        ("Deslocamento / Potência", "43,3 kg/HP", "30,0 kg/HP", "40,0 kg/HP", "23,8 kg/HP", "32,0 kg/HP", "19,5 kg/HP", "31,4 kg/HP", "28,8 kg/HP (25HP)")
    ]
    
    for r in rows:
        if r[0] == "— RAZÕES ADIMENSIONAIS —":
            row_cells = [Paragraph(f"<b>{r[0]}</b>", table_param)] + [Paragraph("", table_cell)]*8
            t_data.append(row_cells)
            continue
        row_cells = [Paragraph(r[0], table_param)]
        for val in r[1:-1]:
            row_cells.append(Paragraph(val, table_cell))
        row_cells.append(Paragraph(r[-1], table_cell_bold))
        t_data.append(row_cells)
        
    col_widths = [4.8*cm] + [2.7*cm]*7 + [2.8*cm]
    t = Table(t_data, colWidths=col_widths)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), azul_brana),
        ('ALIGN', (0,0), (-1,-1), 'CENTER'),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('GRID', (0,0), (-1,-1), 0.5, cinza_borda),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, cinza_fundo]),
        ('TOPPADDING', (0,0), (-1,-1), 2.5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 2.5),
        ('BACKGROUND', (-1,1), (-1,-1), colors.HexColor('#EBF3F8')),
    ]))
    
    story.append(t)
    story.append(Spacer(1, 0.3*cm))
    
    # Análise das Razões e Lacunas
    story.append(Paragraph("ANÁLISE DAS RAZÕES ADIMENSIONAIS E LACUNAS DE OTIMIZAÇÃO", h2_style))
    analise_txt = (
        "<b>1. Razão Boca/Comprimento (BOA/LOA = 0,319):</b> O projeto adota 1,85 m de boca para 5,80 m de LOA, situando-se exatamente na faixa ideal dos modelos FAO/Panga (0,30 a 0,32). Evita a excessiva instabilidade das bateiras estreitas tradicionais (0,28) e o arrasto hidrodinâmico excessivo de skiffs americanos (0,37), que exigiriam motores acima de 40 HP.<br/>"
        "<b>2. Razão Deslocamento-Comprimento (DLR = 131,8):</b> Enquadra a embarcação na categoria <i>Ultra-Light / Light Displacement</i> (< 150). Essa esbeltez é a chave para o barco entrar em semi-planeio limpo a partir de 11 nós com o motor Mercury 15 Super (18 HP) carregando 5 pessoas sem empinar a proa.<br/>"
        "<b>3. Razão Velocidade-Comprimento (SLR = 3,58 em cruzeiro de 15 nós):</b> Confirma regime de semi-planeio hidrodinâmico eficiente (zona entre 2,5 e 4,0), onde a sustentação dinâmica da popa plana reduz a resistência residual sem exigir a potência bruta de cascos em Deep-V.<br/>"
        "<b>4. Relação Área Vélica/Deslocamento (SA/D = 14,8):</b> A vela de içar auxiliar de 11,0 m² oferece empuxo suficiente para cruzeiro econômico de 4,5 a 6,0 nós em ventos de través/popa de 12-16 nós na Baía de Todos-os-Santos.<br/>"
        "<b>5. Lacunas de Otimização Resolvidas no Projeto II:</b> Botes de alumínio comerciais (Levefort) e fibra pesada (Carolina Skiff) exigem alta potência (40-60 HP) e batem seco na marola. O Projeto II fecha o vão: casco leve em compensado/epóxi, fundo Semi-V na proa com flare e quina viva sustentada na popa, unindo baixo custo de motorização (15-25 HP), navegação macia e convés 100% desimpedido para pesca."
    )
    story.append(Paragraph(analise_txt, body_style))
    
    doc.build(story)

if __name__ == '__main__':
    gerar_pdf_similares_fao('/home/magdalena/eee/alunos/carlos-silva/projetos/II_02_Bote_Apoio_Pesqueiro_5.8m/Estudo_de_Similares_Bote_5.8m.pdf')
