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_134(pdf_path):
    doc = SimpleDocTemplate(
        pdf_path,
        pagesize=landscape(A4),
        leftMargin=1.5*cm,
        rightMargin=1.5*cm,
        topMargin=1.2*cm,
        bottomMargin=1.2*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=15, leading=18,
        textColor=azul_brana, spaceAfter=2
    )
    sub_style = ParagraphStyle(
        'DocSub', parent=styles['Normal'],
        fontName='Helvetica', fontSize=8.5, leading=11,
        textColor=colors.HexColor('#4B5563')
    )
    h2_style = ParagraphStyle(
        'DocH2', parent=styles['Heading2'],
        fontName='Helvetica-Bold', fontSize=10.5, leading=13,
        textColor=azul_brana, spaceBefore=6, spaceAfter=3
    )
    body_style = ParagraphStyle(
        'DocBody', parent=styles['Normal'],
        fontName='Helvetica', fontSize=7.5, leading=10.5,
        textColor=texto_escuro
    )
    table_hdr = ParagraphStyle(
        'TableHdr', parent=styles['Normal'],
        fontName='Helvetica-Bold', fontSize=7, leading=8.5,
        textColor=colors.white, alignment=1
    )
    table_cell = ParagraphStyle(
        'TableCell', parent=styles['Normal'],
        fontName='Helvetica', fontSize=7, leading=8.5,
        textColor=texto_escuro, alignment=1
    )
    table_cell_bold = ParagraphStyle(
        'TableCellBold', parent=styles['Normal'],
        fontName='Helvetica-Bold', fontSize=7, leading=8.5,
        textColor=azul_brana, alignment=1
    )
    table_param = ParagraphStyle(
        'TableParam', parent=styles['Normal'],
        fontName='Helvetica-Bold', fontSize=7, leading=8.5,
        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>Base Normativa:</b> FAO Documento Técnico sobre as Pescas 134 (Rev. 2) · Øyvind Gulbrandsen | <b>Projetista:</b> Carlos Silva | <b>Estaleiro Escola Embrião / Brana</b>", sub_style))
    story.append(Spacer(1, 0.15*cm))
    story.append(HRFlowable(width="100%", thickness=1.2, color=azul_brana, spaceBefore=1, spaceAfter=5))
    
    # Tabela com 6 Similares Exatos (Série FAO 134 + Referências Diretas)
    headers = [
        Paragraph("<b>Parâmetro / Variável</b>", table_hdr),
        Paragraph("<b>1. FAO 134 (5,2m)<br/>Gulbrandsen P.12</b>", table_hdr),
        Paragraph("<b>2. FAO 134 (6,3m)<br/>Gulbrandsen P.13</b>", table_hdr),
        Paragraph("<b>3. FAO 134 (7,4m)<br/>Gulbrandsen P.14</b>", table_hdr),
        Paragraph("<b>4. FAO KIR-10 (6,0m)<br/>Pesca Costeira</b>", table_hdr),
        Paragraph("<b>5. Yamaha Panga 19<br/>(5,80m Pesqueiro)</b>", table_hdr),
        Paragraph("<b>6. Bateira Baiana<br/>(5,80m BTS)</b>", table_hdr),
        Paragraph("<b>MÉDIA DOS<br/>6 SIMILARES</b>", table_hdr),
        Paragraph("<b>PROJETO II<br/>(Bote 5,80m)</b>", table_hdr)
    ]
    
    t_data = [headers]
    
    rows = [
        ("LOA (Comprimento Total)", "5,20 m", "6,30 m", "7,40 m", "6,00 m", "5,80 m", "5,80 m", "6,08 m", "5,80 m"),
        ("LWL (Linha d'Água)", "4,75 m", "5,80 m", "6,85 m", "5,55 m", "5,30 m", "5,40 m", "5,61 m", "5,35 m"),
        ("BOA (Boca Máxima)", "1,85 m", "1,85 m", "1,85 m", "1,80 m", "1,82 m", "1,65 m", "1,80 m", "1,85 m"),
        ("Pontal na Meia-Nau (DMD)", "0,72 m", "0,72 m", "0,72 m", "0,70 m", "0,68 m", "0,62 m", "0,69 m", "0,72 m"),
        ("Calado do Casco (T)", "0,17 m", "0,19 m", "0,22 m", "0,20 m", "0,18 m", "0,16 m", "0,19 m", "0,18 m"),
        ("Deslocamento Carregado (Δ)", "700 kg", "840 kg", "1.100 kg", "800 kg", "750 kg", "600 kg", "798 kg", "750 kg"),
        ("Peso Casco Vazio (Lightship)", "400 kg (tab.) / 115 kg (ply)", "490 kg (tab.) / 140 kg (ply)", "700 kg (diesel)", "160 kg (ply)", "190 kg (fg)", "140 kg (madeira)", "348 kg", "145 kg (ply/epóxi)"),
        ("Capacidade de Carga Útil", "300 kg", "350 kg", "400 kg", "640 kg", "560 kg", "460 kg", "452 kg", "600 kg"),
        ("Potência Instalada Nominal", "4 a 6 HP", "5 a 8 HP", "6 a 8 HP (diesel)", "25 HP", "25 HP", "15 HP", "14,7 HP", "15 a 25 HP (15 Super)"),
        ("Área Vélica Auxiliar", "6,0 m² (p.63)", "7,5 m² (p.63)", "9,0 m² (p.63)", "11,5 m²", "—", "12,0 m²", "9,2 m²", "11,0 m² (içar)"),
        ("Velocidade de Serviço / Max", "5,5 / 9,0 nós", "6,0 / 11,0 nós", "6,5 / 12,0 nós", "15,0 / 21,0 nós", "16,0 / 22,0 nós", "12,0 / 17,0 nós", "10,1 / 15,3 nós", "15,0 / 22,0 nós"),
        ("— RAZÕES ADIMENSIONAIS —", "", "", "", "", "", "", "", ""),
        ("BOA / LOA (Boca / Comprimento)", "0,356", "0,294", "0,250", "0,300", "0,314", "0,284", "0,300", "0,319"),
        ("DLR (Desloc.-Comprimento)", "182,3", "120,4", "95,9", "130,9", "140,8", "106,7", "129,5", "137,3"),
        ("SLR em Serviço (Vk / √LWLft)", "1,39", "1,38", "1,37", "3,52", "3,84", "2,85", "2,39", "3,58 (semi-planeio)"),
        ("SA / D (Área Vélica / Desloc.)", "9,8", "10,8", "11,1", "13,5", "—", "17,1", "12,5", "14,5"),
        ("Deslocamento / Potência", "116,7 kg/HP (6HP)", "105,0 kg/HP (8HP)", "137,5 kg/HP (8HP)", "32,0 kg/HP", "30,0 kg/HP", "40,0 kg/HP", "76,9 kg/HP", "41,7 kg/HP (18HP) / 30,0 (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.5*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),
        ('BOTTOMPADDING', (0,0), (-1,-1), 2),
        ('BACKGROUND', (-1,1), (-1,-1), colors.HexColor('#EBF3F8')),
    ]))
    
    story.append(t)
    story.append(Spacer(1, 0.2*cm))
    
    # Análise das Razões e Lacunas
    story.append(Paragraph("ANÁLISE DAS RAZÕES ADIMENSIONAIS E LACUNAS DE OTIMIZAÇÃO (DIRETRIZES DA FAO 134)", h2_style))
    analise_txt = (
        "<b>1. Relação Boca/Comprimento (BOA/LOA = 0,319):</b> A FAO 134 adota boca fixa padrão de 1,85 m em toda a série (pág. 10–15). No Bote de 5,80 m, essa relação de 0,319 garante estabilidade estática formidável para pesca em pé e recolhimento de redes, superando a instabilidade das bateiras tradicionais estreitas (0,284).<br/>"
        "<b>2. Razão Deslocamento-Comprimento (DLR = 137,3):</b> Enquadrado como <i>Light Displacement</i> (< 150). Quando construído em compensado naval e epóxi (peso casco ~145 kg), o barco desloca 750 kg totalmente carregado, permitindo planeio/semi-planeio sustentado a 15 nós com o motor Mercury 15 Super (18 HP).<br/>"
        "<b>3. Razão Velocidade-Comprimento (SLR = 3,58):</b> Os barcos originais da FAO operavam em deslocamento puro (SLR = 1,38 a 6 nós com 6-8 HP). O Projeto II otimiza o fundo com quinas vivas sustentadas na popa (5° deadrise), estendendo a faixa operacional para semi-planeio de 15 a 22 nós quando necessário.<br/>"
        "<b>4. Relação Área Vélica/Deslocamento (SA/D = 14,5):</b> Incorpora a mastreação desmontável e a vela de içar (págs. 61-63 da FAO 134), garantindo propulsão auxiliar eficiente para navegar a 4,5-5,5 nós nos ventos Alísios da Baía de Todos-os-Santos sem gastar combustível.<br/>"
        "<b>5. Lacunas de Otimização Resolvidas no Projeto II:</b> Elimina o peso excessivo do tabuamento tradicional pesado e a fragilidade de botes comerciais, oferecendo convés 100% plano, flutuabilidade positiva insubmergível (pág. 63) e toldo modular de pernoite (pág. 64)."
    )
    story.append(Paragraph(analise_txt, body_style))
    
    doc.build(story)

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