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

def compilar_projeto_naval_integral_grupo2(pdf_path):
    doc = SimpleDocTemplate(
        pdf_path,
        pagesize=A4,
        leftMargin=1.5*cm,
        rightMargin=1.5*cm,
        topMargin=1.5*cm,
        bottomMargin=1.5*cm
    )
    styles = getSampleStyleSheet()
    azul_brana = colors.HexColor('#002B49')
    azul_claro = colors.HexColor('#EBF3F8')
    cinza_fundo = colors.HexColor('#F4F6F8')
    cinza_borda = colors.HexColor('#D1D5DB')
    texto_escuro = colors.HexColor('#1F2937')
    vermelho_escuro = colors.HexColor('#9A3231')
    
    title_style = ParagraphStyle('DocTitle', parent=styles['Heading1'], fontName='Helvetica-Bold', fontSize=18, leading=22, textColor=azul_brana, spaceAfter=2)
    sub_style = ParagraphStyle('DocSub', parent=styles['Normal'], fontName='Helvetica', fontSize=9, leading=13, textColor=colors.HexColor('#4B5563'))
    h1_sec = ParagraphStyle('DocH1Sec', parent=styles['Heading1'], fontName='Helvetica-Bold', fontSize=13, leading=16, textColor=azul_brana, spaceBefore=14, spaceAfter=6)
    h2_sec = ParagraphStyle('DocH2Sec', parent=styles['Heading2'], fontName='Helvetica-Bold', fontSize=10.5, leading=13.5, textColor=vermelho_escuro, spaceBefore=8, spaceAfter=4)
    body = ParagraphStyle('DocBody', parent=styles['Normal'], fontName='Helvetica', fontSize=8, leading=11.5, textColor=texto_escuro)
    body_bold = ParagraphStyle('DocBodyB', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=8, leading=11.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)
    table_cell_c = ParagraphStyle('TableCellC', parent=styles['Normal'], fontName='Helvetica', fontSize=7, leading=8.5, textColor=texto_escuro, alignment=1)
    table_cell_b = ParagraphStyle('TableCellB', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=7, leading=8.5, textColor=azul_brana, alignment=1)

    story = []
    
    # CAPA / CABEÇALHO GERAL
    story.append(Paragraph("PROJETO NAVAL INTEGRAL — MEMORIAL TÉCNICO COMPLETO", title_style))
    story.append(Paragraph("<b>EMBARCAÇÃO:</b> SAVEIRO TRADICIONAL 'TESOURO DA BAÍA' (12,00 m)", ParagraphStyle('Sub1', parent=sub_style, fontSize=11, leading=14, textColor=vermelho_escuro, fontName='Helvetica-Bold')))
    story.append(Paragraph("<b>GRUPO 2:</b> Carlos Silva, Cauã e Alessandra Feitosa | <b>INSTITUIÇÃO:</b> Estaleiro Escola Embrião (EEE) / Brana Projetos Navais", sub_style))
    story.append(Paragraph("<b>DOCUMENTO CONSOLIDADO:</b> Síntese de Todas as Fases do Projeto (Missão, Área, Similares, Linhas, Hidrostática, Pesos, Escantilhão ABS e Rigging)", sub_style))
    story.append(Spacer(1, 0.2*cm))
    story.append(HRFlowable(width="100%", thickness=2.0, color=azul_brana, spaceBefore=2, spaceAfter=8))
    
    # 1. RESUMO EXECUTIVO E CASO DE USO
    story.append(Paragraph("1. Resumo Executivo e Caso de Uso (Missão e Requisitos Operacionais)", h1_sec))
    story.append(Paragraph(
        "O <b>Tesouro da Baía</b> é um saveiro de transporte e turismo de vivência cultural com 12,00 metros de comprimento total, "
        "projetado para operar nas águas abrigadas da Baía de Todos-os-Santos e estuários do Recôncavo Baiano (Nazaré das Farinhas, Maragogipe, "
        "Cachoeira e Barra do Paraguaçu). A missão primária combina a preservação da carpintaria naval tradicional da Bahia com capacidade utilitária "
        "de carga (produtos regionais/olaria/cerâmica) e transporte de até 12 passageiros em passeios náuticos de ecoturismo. "
        "A propulsão é híbrida tradicional: armação com vela de pena (içar) de 95 m² e motor diesel auxiliar de centro de 40 HP.",
        body
    ))
    story.append(Spacer(1, 0.3*cm))
    
    # 2. ÁREA DE NAVEGAÇÃO E RESTRIÇÕES HIDROGRÁFICAS
    story.append(Paragraph("2. Área de Navegação e Restrições Hidrográficas (Baía de Todos-os-Santos)", h1_sec))
    story.append(Paragraph(
        "• <b>Enquadramento:</b> NORMAM Navegação Interior (Águas Abrigadas 1 e 2).<br/>"
        "• <b>Batimetria e Calado:</b> Marés semidiurnas com variação de até 2,4 m em sizígia. O calado de projeto foi rigorosamente fixado em "
        "<b>0,92 m</b> para permitir a passagem na barra de Nazaré e fundeio em praias de maré sem risco de danos estruturais na baixa-mar.<br/>"
        "• <b>Espectro de Ondas:</b> Ondas curtas de baía (0,4 m a 1,2 m de altura significativa, período de 2,5 a 4,0 s). O casco redondo com "
        "proa lançada de 1,90 m de pontal garante excelente comportamento marinheiro, sem bater seco e mantendo o convés enxuto.<br/>"
        "• <b>Regime de Ventos:</b> Alísios de ESE (10 a 18 nós), com rajadas térmicas vespertinas que alimentam a armação tradicional de pena.",
        body
    ))
    story.append(Spacer(1, 0.3*cm))
    
    # 3. DIMENSÕES PRINCIPAIS E COEFICIENTES DE FORMA
    story.append(Paragraph("3. Dimensões Principais e Coeficientes Hidrostáticos (Tabela V4 Oficial)", h1_sec))
    
    dim_data = [
        [Paragraph("<b>Parâmetro Dimensional</b>", table_hdr), Paragraph("<b>Valor de Projeto</b>", table_hdr), Paragraph("<b>Coeficiente Hidrostático</b>", table_hdr), Paragraph("<b>Valor Adotado</b>", table_hdr), Paragraph("<b>Significado / Comportamento</b>", table_hdr)],
        [Paragraph("Comprimento Total (LOA)", table_cell), Paragraph("12,000 m", table_cell_c), Paragraph("Coeficiente de Bloco (Cb)", table_cell), Paragraph("0,358", table_cell_b), Paragraph("Carena esbelta, baixo arrasto de onda", table_cell)],
        [Paragraph("Comprimento Linha d'Água (LWL)", table_cell), Paragraph("10,000 m", table_cell_c), Paragraph("Coeficiente Prismático (Cp)", table_cell), Paragraph("0,585", table_cell_b), Paragraph("Ideal para deslocamento puro a 7,7 nós", table_cell)],
        [Paragraph("Boca Máxima Moldada (BOA)", table_cell), Paragraph("4,358 m", table_cell_c), Paragraph("Coeficiente Seção Mestra (Cm)", table_cell), Paragraph("0,612", table_cell_b), Paragraph("Bojo redondo com fundo wineglass", table_cell)],
        [Paragraph("Boca na Linha d'Água (BWL)", table_cell), Paragraph("3,922 m", table_cell_c), Paragraph("Coeficiente Linha d'Água (Cwp)", table_cell), Paragraph("0,715", table_cell_b), Paragraph("Alta estabilidade inicial e rigidez à lona", table_cell)],
        [Paragraph("Pontal na Meia-Nau (D)", table_cell), Paragraph("1,900 m", table_cell_c), Paragraph("Área Seção Mestra (Am)", table_cell), Paragraph("2,21 m²", table_cell_b), Paragraph("Transição suave de meia-nau", table_cell)],
        [Paragraph("Pontal Total na Proa", table_cell), Paragraph("2,790 m", table_cell_c), Paragraph("Área do Plano de Flutuação (Awl)", table_cell), Paragraph("28,05 m²", table_cell_b), Paragraph("Imersão: 287 kg por centímetro de calado", table_cell)],
        [Paragraph("Calado de Projeto (T)", table_cell), Paragraph("0,922 m", table_cell_c), Paragraph("Volume Carena Deslocado (∇)", table_cell), Paragraph("14,146 m³", table_cell_b), Paragraph("Deslocamento pleno de 14.500 kg em salgada", table_cell)],
        [Paragraph("Razão Boca / Comprimento", table_cell), Paragraph("0,363", table_cell_c), Paragraph("Razão Desloc.-Comprimento (DLR)", table_cell), Paragraph("404", table_cell_b), Paragraph("Embarcação pesada de carga e tradição", table_cell)]
    ]
    t_dim = Table(dim_data, colWidths=[4.2*cm, 2.4*cm, 4.0*cm, 2.0*cm, 5.4*cm])
    t_dim.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), azul_brana),
        ('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),
    ]))
    story.append(t_dim)
    story.append(Spacer(1, 0.3*cm))
    
    # 4. TABELA DE COTAS OFICIAL (OFFSETS DA LINHA DE RISCO)
    story.append(Paragraph("4. Tabela de Cotas Oficial (Offsets Milimétricos das 11 Balizas - V4)", h1_sec))
    story.append(Paragraph("Alturas acima da linha de base (ponto mais baixo da quilha), meias-bocas a partir da linha de centro (CL) em milímetros:", body))
    story.append(Spacer(1, 0.15*cm))
    
    offsets_data = [
        [Paragraph("<b>Bal.</b>", table_hdr), Paragraph("<b>X (mm)</b>", table_hdr), Paragraph("<b>Z Quilha</b>", table_hdr), Paragraph("<b>Z Borda</b>", table_hdr), Paragraph("<b>MB 12,5%</b>", table_hdr), Paragraph("<b>MB 25%</b>", table_hdr), Paragraph("<b>MB 38%</b>", table_hdr), Paragraph("<b>MB 50%</b>", table_hdr), Paragraph("<b>MB 62%</b>", table_hdr), Paragraph("<b>MB 75%</b>", table_hdr), Paragraph("<b>MB 88%</b>", table_hdr), Paragraph("<b>MB Borda</b>", table_hdr)],
        ["1", "0", "1314", "2338", "501", "770", "968", "1126", "1256", "1364", "1456", "1537"],
        ["2", "1200", "967", "2251", "670", "981", "1203", "1380", "1527", "1651", "1757", "1849"],
        ["3", "2400", "644", "2172", "810", "1157", "1406", "1603", "1766", "1905", "2023", "2126"],
        ["4", "3600", "345", "2104", "882", "1249", "1507", "1710", "1877", "2019", "2141", "2246"],
        ["5", "4800", "102", "2050", "921", "1292", "1549", "1749", "1913", "2050", "2168", "2269"],
        ["6", "6000", "0", "2016", "919", "1280", "1527", "1718", "1872", "2000", "2108", "2201"],
        ["7", "7200", "57", "2011", "835", "1157", "1376", "1542", "1675", "1783", "1873", "1948"],
        ["8", "8400", "292", "2048", "678", "941", "1120", "1255", "1363", "1449", "1520", "1578"],
        ["9", "9600", "720", "2147", "473", "659", "787", "884", "961", "1024", "1076", "1119"],
        ["10", "10800", "1339", "2338", "249", "351", "422", "476", "519", "555", "584", "609"],
        ["11", "12000", "2149", "2650", "0", "0", "0", "0", "0", "0", "0", "0"]
    ]
    t_off = Table([[Paragraph(c, table_cell_c) if isinstance(c, str) else c for c in row] for row in offsets_data], 
                  colWidths=[1.1*cm, 1.5*cm, 1.4*cm, 1.4*cm, 1.6*cm, 1.6*cm, 1.6*cm, 1.6*cm, 1.6*cm, 1.6*cm, 1.6*cm, 1.8*cm])
    t_off.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), azul_brana),
        ('GRID', (0,0), (-1,-1), 0.5, cinza_borda),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, cinza_fundo]),
        ('TOPPADDING', (0,0), (-1,-1), 1.5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 1.5),
    ]))
    story.append(t_off)
    story.append(Spacer(1, 0.3*cm))
    
    # 5. ESCANTILHÃO E ARRANJO ESTRUTURAL (ABS / DAVE GERR)
    story.append(Paragraph("5. Escantilhão e Arranjo Estrutural de Madeira Maciça (Regras ABS / Dave Gerr)", h1_sec))
    story.append(Paragraph(
        "O dimensionamento foi executado para o regime de mar severo pelo <i>ABS Guide for Offshore Racing Yachts</i> e conferido "
        "pelo método empírico de Dave Gerr. Os dados geométricos das superfícies do casco integradas a partir dos offsets são:<br/>"
        "• <b>Área de Chapeamento do Fundo:</b> 36,00 m² (Espessura adotada: <b>25,0 mm</b> em madeira nobre, FS = 2,77).<br/>"
        "• <b>Área de Chapeamento do Costado:</b> 34,10 m² (Espessura adotada: <b>28,0 mm</b>, FS = 2,95).<br/>"
        "• <b>Área do Espelho de Popa:</b> 7,12 m² (Espessura adotada: <b>16,0 mm</b>).<br/>"
        "• <b>Área de Convés e Trincaniz:</b> 18,75 m² (Espessura adotada: <b>16,0 mm</b>).<br/>"
        "• <b>Cavernas e Balizas Transversais:</b> 30 cavernas espaçadas a 387 mm (Alma 25×175 mm c/ chapuz 50×25 mm, SM = 152,1 cm³).<br/>"
        "• <b>Longitudinais de Fundo:</b> 6 por bordo a cada 228 mm (Sarrafos 19×63 mm, SM = 7,0 cm³).<br/>"
        "• <b>Quilha Maciça e Hastilhas:</b> Quilha corrida de Massaranduba 150×150 mm e hastilhas alma 32×200 mm c/ chapuz 100×32 mm.<br/>"
        "• <b>Anteparas de Colisão Estanques:</b> Vante na baliza 28 (10,84 m do espelho) e Ré na baliza 3 (1,16 m do espelho).",
        body
    ))
    story.append(Spacer(1, 0.3*cm))
    
    # 6. MEMÓRIA DE PESOS, CENTROS, TRIM E ESTABILIDADE
    story.append(Paragraph("6. Quadro Geral de Pesos, Centros de Gravidade e Estabilidade Intacta", h1_sec))
    
    pesos_summary = [
        [Paragraph("<b>Grupo / Componente</b>", table_hdr), Paragraph("<b>Massa (kg)</b>", table_hdr), Paragraph("<b>% Δ</b>", table_hdr), Paragraph("<b>LCG da Popa (m)</b>", table_hdr), Paragraph("<b>VCG da Base (m)</b>", table_hdr), Paragraph("<b>Momento Longitudinal</b>", table_hdr)],
        [Paragraph("1. Chapeamento do Casco (Fundo/Costado/Popa/Convés)", table_cell), Paragraph("1.474 kg", table_cell_c), Paragraph("10,2%", table_cell_c), Paragraph("5,32 m", table_cell_c), Paragraph("1,25 m", table_cell_c), Paragraph("7.842 kgf·m", table_cell_c)],
        [Paragraph("2. Reforços (Cavernas, Longitudinais, Quilha, Vaus)", table_cell), Paragraph("1.817 kg", table_cell_c), Paragraph("12,5%", table_cell_c), Paragraph("5,41 m", table_cell_c), Paragraph("1,21 m", table_cell_c), Paragraph("9.830 kgf·m", table_cell_c)],
        [Paragraph("3. Anteparas Estanques de Colisão", table_cell), Paragraph("174 kg", table_cell_c), Paragraph("1,2%", table_cell_c), Paragraph("3,50 m", table_cell_c), Paragraph("1,52 m", table_cell_c), Paragraph("609 kgf·m", table_cell_c)],
        [Paragraph("4. Margem de Construção / Cravação / Cola (+12%)", table_cell), Paragraph("416 kg", table_cell_c), Paragraph("2,9%", table_cell_c), Paragraph("5,40 m", table_cell_c), Paragraph("1,35 m", table_cell_c), Paragraph("2.246 kgf·m", table_cell_c)],
        [Paragraph("<b>ESTRUTURA COMPLETA DO CASCO (LIGHTSHIP)</b>", table_cell), Paragraph("<b>3.881 kg</b>", table_cell_b), Paragraph("<b>26,8%</b>", table_cell_b), Paragraph("<b>5,40 m</b>", table_cell_b), Paragraph("<b>1,35 m</b>", table_cell_b), Paragraph("<b>20.957 kgf·m</b>", table_cell_b)],
        [Paragraph("5. Lastro Fixo de Fundo (Chumbo/Ferro Fundido)", table_cell), Paragraph("4.200 kg", table_cell_c), Paragraph("29,0%", table_cell_c), Paragraph("5,20 m", table_cell_c), Paragraph("0,20 m", table_cell_c), Paragraph("21.840 kgf·m", table_cell_c)],
        [Paragraph("6. Mastreação, Mastro Maciço e Vela de Pena", table_cell), Paragraph("550 kg", table_cell_c), Paragraph("3,8%", table_cell_c), Paragraph("6,50 m", table_cell_c), Paragraph("6,20 m", table_cell_c), Paragraph("3.575 kgf·m", table_cell_c)],
        [Paragraph("7. Motor Diesel Centro (40 HP) e Linha de Eixo", table_cell), Paragraph("380 kg", table_cell_c), Paragraph("2,6%", table_cell_c), Paragraph("3,20 m", table_cell_c), Paragraph("0,75 m", table_cell_c), Paragraph("1.216 kgf·m", table_cell_c)],
        [Paragraph("8. Tanques de Líquidos (300 L Diesel + 400 L Água)", table_cell), Paragraph("660 kg", table_cell_c), Paragraph("4,5%", table_cell_c), Paragraph("5,30 m", table_cell_c), Paragraph("0,57 m", table_cell_c), Paragraph("3.498 kgf·m", table_cell_c)],
        [Paragraph("9. Mobília, Casaria de Popa e Equipamentos", table_cell), Paragraph("650 kg", table_cell_c), Paragraph("4,5%", table_cell_c), Paragraph("5,50 m", table_cell_c), Paragraph("1,40 m", table_cell_c), Paragraph("3.575 kgf·m", table_cell_c)],
        [Paragraph("10. Tripulação e Passageiros (12 Pessoas)", table_cell), Paragraph("960 kg", table_cell_c), Paragraph("6,6%", table_cell_c), Paragraph("5,10 m", table_cell_c), Paragraph("1,90 m", table_cell_c), Paragraph("4.896 kgf·m", table_cell_c)],
        [Paragraph("11. Carga Útil Comercial / Rancho / Ferramentas", table_cell), Paragraph("3.219 kg", table_cell_c), Paragraph("22,2%", table_cell_c), Paragraph("5,30 m", table_cell_c), Paragraph("0,85 m", table_cell_c), Paragraph("17.060 kgf·m", table_cell_c)],
        [Paragraph("<b>DESLOCAMENTO PLENO DE PROJETO (Δ)</b>", table_cell), Paragraph("<b>14.500 kg</b>", table_cell_b), Paragraph("<b>100%</b>", table_cell_b), Paragraph("<b>5,30 m</b>", table_cell_b), Paragraph("<b>1,07 m</b>", table_cell_b), Paragraph("<b>76.617 kgf·m</b>", table_cell_b)]
    ]
    t_pesos = Table(pesos_summary, colWidths=[5.4*cm, 2.0*cm, 1.4*cm, 2.3*cm, 2.3*cm, 4.0*cm])
    t_pesos.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), azul_brana),
        ('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', (0,4), (-1,4), azul_claro),
        ('BACKGROUND', (0,-1), (-1,-1), azul_claro),
    ]))
    story.append(t_pesos)
    story.append(Spacer(1, 0.3*cm))
    
    # 7. PLANO VÉLICO, EQUILÍBRIO E PERFORMANCE
    story.append(Paragraph("7. Plano Vélico Tradicional e Estimativa de Velocidade", h1_sec))
    story.append(Paragraph(
        "• <b>Armação Vélica:</b> Vela de Pena tradicional dos Saveiros da Bahia (área vélica nominal: <b>95,0 m²</b>). Mastro de madeira maciça de 14,5 m.<br/>"
        "• <b>Avanço do Centro Vélico (Lead):</b> Centro Vélico ($CE = 5,82\text{ m}$) posicionado com avanço de <b>11,2% de LWL</b> à frente do Centro Lateral de Resistência ($CLR = 4,70\text{ m}$), garantindo estabilidade direcional e cana de leme leve e responsiva.<br/>"
        "• <b>Adernamento de Projeto (Ângulo de Dellenbaugh):</b> <b>14,8°</b> com vento de 15 nós de través, demonstrando altíssima rigidez proporcionada pelo lastro de 4,2 t e boca de 4,36 m.<br/>"
        "• <b>Estimativa de Velocidade a Motor (Dave Gerr):</b> Com motor diesel de 40 HP e hélice tripá de passo adequado, o saveiro atinge velocidade de cruzeiro de <b>6,8 nós</b> e velocidade máxima de casco de <b>7,7 nós</b> com consumo de 5,5 L/h.",
        body
    ))
    story.append(Spacer(1, 0.4*cm))
    story.append(HRFlowable(width="100%", thickness=1.0, color=azul_brana, spaceBefore=4, spaceAfter=6))
    story.append(Paragraph("<i>Memorial Descritivo e Projeto Naval Integral elaborado no âmbito do Curso de Design Profissional de Embarcações — Estaleiro Escola Embrião & Brana Projetos Navais.</i>", ParagraphStyle('RodFinal', parent=body, fontSize=7.5, textColor=colors.HexColor('#6B7280'), alignment=1)))
    
    doc.build(story)

if __name__ == '__main__':
    compilar_projeto_naval_integral_grupo2('/home/magdalena/eee/alunos/carlos-silva/grupo-2-tesouro-da-baia/Projeto_Naval_Integral_Tesouro_da_Baia_Grupo_2.pdf')
