import os
import sys
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak, KeepTogether, HRFlowable, Image as RLImage
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.pdfgen import canvas

class NumberedCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        super(NumberedCanvas, self).__init__(*args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_page_number(num_pages)
            super(NumberedCanvas, self).showPage()
        super(NumberedCanvas, self).save()

    def draw_page_number(self, page_count):
        self.saveState()
        self.setFont("Helvetica", 9)
        self.setFillColor(colors.HexColor("#4A5568"))
        
        # Header (pages > 1)
        if self._pageNumber > 1:
            self.drawString(54, 800, "Brana Escola de Engenharia Naval | Estaleiro Escola Embrião (EEE)")
            self.drawRightString(541, 800, "Catamarã 42' — Turismo e Esporte (BTS)")
            self.setStrokeColor(colors.HexColor("#CBD5E0"))
            self.setLineWidth(0.5)
            self.line(54, 792, 541, 792)
            
        # Footer
        text = f"Página {self._pageNumber} de {page_count}"
        self.drawRightString(541, 36, text)
        self.drawString(54, 36, "Projeto Preliminar: Allan Braga — Prof. Assistente: Magdalena (Mada)")
        self.setStrokeColor(colors.HexColor("#CBD5E0"))
        self.setLineWidth(0.5)
        self.line(54, 48, 541, 48)
        self.restoreState()

def build_pdf(filename):
    doc = SimpleDocTemplate(
        filename,
        pagesize=A4,
        leftMargin=54,
        rightMargin=54,
        topMargin=54,
        bottomMargin=54
    )

    styles = getSampleStyleSheet()
    
    # Custom styles
    primary_color = colors.HexColor("#0F3E6D")     # Deep ocean blue
    secondary_color = colors.HexColor("#1D70B8")   # Bright maritime blue
    dark_neutral = colors.HexColor("#1A202C")
    light_bg = colors.HexColor("#F7FAFC")
    accent_bar = colors.HexColor("#009688")

    title_style = ParagraphStyle(
        'DocTitle',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=24,
        leading=28,
        textColor=primary_color,
        spaceAfter=6
    )
    
    subtitle_style = ParagraphStyle(
        'DocSubTitle',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=13,
        leading=16,
        textColor=secondary_color,
        spaceAfter=15
    )

    h1_style = ParagraphStyle(
        'Heading1_Custom',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=15,
        leading=18,
        textColor=primary_color,
        spaceBefore=12,
        spaceAfter=6,
        keepWithNext=True
    )

    h2_style = ParagraphStyle(
        'Heading2_Custom',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=12,
        leading=15,
        textColor=secondary_color,
        spaceBefore=8,
        spaceAfter=4,
        keepWithNext=True
    )

    body_style = ParagraphStyle(
        'Body_Custom',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=10,
        leading=14,
        textColor=dark_neutral,
        spaceAfter=6
    )

    bullet_style = ParagraphStyle(
        'Bullet_Custom',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=9.5,
        leading=13.5,
        textColor=dark_neutral,
        leftIndent=14,
        firstLineIndent=-10,
        spaceAfter=3
    )

    callout_style = ParagraphStyle(
        'Callout_Custom',
        parent=styles['Normal'],
        fontName='Helvetica-Oblique',
        fontSize=9.5,
        leading=14,
        textColor=colors.HexColor("#2D3748")
    )

    table_cell = ParagraphStyle(
        'TableCell',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=9,
        leading=12,
        textColor=dark_neutral
    )

    table_cell_bold = ParagraphStyle(
        'TableCellBold',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=9,
        leading=12,
        textColor=dark_neutral
    )

    table_cell_header = ParagraphStyle(
        'TableCellHeader',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=9,
        leading=12,
        textColor=colors.white
    )

    story = []

    # --- CAPA / CABEÇALHO ---
    story.append(Spacer(1, 10))
    story.append(Paragraph("MEMORIAL DESCRITIVO & PROJETO CONCEITUAL", subtitle_style))
    story.append(Paragraph("Catamarã a Vela 42' para Turismo e Esporte", title_style))
    story.append(Paragraph("Área de Operação: Baía de Todos os Santos (BTS), Bahia", ParagraphStyle(
        'SubLocation', parent=body_style, fontName='Helvetica-Bold', textColor=secondary_color, fontSize=11
    )))
    story.append(HRFlowable(width="100%", thickness=2, color=primary_color, spaceBefore=4, spaceAfter=12))

    # Tabela de Metadados
    meta_data = [
        [Paragraph("<b>Projetista / Aluno:</b> Allan Braga", table_cell), 
         Paragraph("<b>Instituição:</b> Brana / Estaleiro Escola Embrião (EEE)", table_cell)],
        [Paragraph("<b>Orientação Técnica:</b> Magdalena (Mada), D.Sc.", table_cell), 
         Paragraph("<b>Data:</b> Setembro / 2026 | <b>Versão:</b> 1.0 (Conceitual)", table_cell)],
        [Paragraph("<b>Tipo de Embarcação:</b> Multicasco (Catamarã a Vela)", table_cell), 
         Paragraph("<b>Regime Construtivo:</b> Painéis Desenvolvidos (Compensado + Epóxi)", table_cell)]
    ]
    t_meta = Table(meta_data, colWidths=[240, 247])
    t_meta.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#EDF2F7")),
        ('BOX', (0,0), (-1,-1), 1, colors.HexColor("#CBD5E0")),
        ('INNERGRID', (0,0), (-1,-1), 0.5, colors.HexColor("#E2E8F0")),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    story.append(t_meta)
    story.append(Spacer(1, 12))

    # --- 1. MISSÃO E REQUISITOS DE PROJETO ---
    story.append(Paragraph("1. Missão e Requisitos de Projeto", h1_style))
    story.append(Paragraph(
        "O presente projeto visa a concepção de uma embarcação multicasco (catamarã a vela) dimensionada "
        "especificamente para operações comerciais de turismo náutico, passeios diurnos (day-charter), charter com "
        "pernoite e prática de esportes náuticos na Baía de Todos os Santos (BTS). O projeto prioriza baixo custo construtivo, "
        "segurança de navegação, facilidade de manutenção e excelente habitabilidade.",
        body_style
    ))
    
    reqs = [
        "<b>Lotação e Acomodação:</b> 10 pessoas confortáveis para pernoite (4 cabines de casal + salão conversível) e até 15 pessoas em passeios diurnos.",
        "<b>Área de Navegação:</b> Águas abrigadas e costeiras da Baía de Todos os Santos (Salvador, Ilha de Itaparica, Frades, Maragojipe e Morro de São Paulo).",
        "<b>Critério de Custo Mínimo:</b> Emprego de método construtivo em compensado naval estrutural resinado com epóxi (método <i>stitch-and-glue</i> / quinas vivas), eliminando moldes complexos de fibra de vidro.",
        "<b>Operação e Manobrabilidade:</b> Plano vélico fracionado simplificado com buja autovirante e motorização auxiliar dupla para atracação segura em qualquer condição."
    ]
    for r in reqs:
        story.append(Paragraph(f"• {r}", bullet_style))

    story.append(Spacer(1, 8))

    # --- 2. PRINCIPAIS DIMENSÕES E PARÂMETROS GEOMÉTRICOS ---
    story.append(Paragraph("2. Dimensões Principais e Hidrostática Preliminar", h1_style))
    story.append(Paragraph(
        "As dimensões foram balanceadas para atingir alta estabilidade transversal por forma, esbeltez de casco "
        "para corte de ondas sem arrasto excessivo e vão livre sob a ponte suficiente para evitar impacto de ondas (<i>slamming</i>).",
        body_style
    ))

    dim_data = [
        [Paragraph("Parâmetro Técnico", table_cell_header), Paragraph("Símbolo", table_cell_header), Paragraph("Valor Projetado", table_cell_header), Paragraph("Observações e Razões de Projeto", table_cell_header)],
        [Paragraph("Comprimento Total (LOA)", table_cell_bold), Paragraph("LOA", table_cell), Paragraph("12,80 m (42,0 ft)", table_cell), Paragraph("Comprimento de proa à popa para capacidade de 10 pessoas", table_cell)],
        [Paragraph("Comprimento Linha d'Água", table_cell_bold), Paragraph("LWL", table_cell), Paragraph("12,20 m (40,0 ft)", table_cell), Paragraph("Máxima linha d'água para velocidade limite de casco de ~8,4 nós", table_cell)],
        [Paragraph("Boca Total (Largura Total)", table_cell_bold), Paragraph("BOA", table_cell), Paragraph("6,90 m (22,6 ft)", table_cell), Paragraph("Razão BOA/LOA = 0,54 — estabilidade transversal robusta", table_cell)],
        [Paragraph("Boca de Cada Casco na Linha d'Água", table_cell_bold), Paragraph("b_wl", table_cell), Paragraph("1,25 m", table_cell), Paragraph("Razão de esbeltez L/b = 9,76 — baixo arrasto de onda", table_cell)],
        [Paragraph("Boca no Convés por Casco", table_cell_bold), Paragraph("B_deck", table_cell), Paragraph("1,60 m", table_cell), Paragraph("Flare pronunciado para comportar camas de casal nas cabines", table_cell)],
        [Paragraph("Calado de Casco (sem quilha)", table_cell_bold), Paragraph("T_c", table_cell), Paragraph("0,45 m", table_cell), Paragraph("Navegação extremamente rasa para praias da BTS", table_cell)],
        [Paragraph("Calado Total (com Quilha Fixa LAR)", table_cell_bold), Paragraph("T_max", table_cell), Paragraph("1,00 m", table_cell), Paragraph("Quilhas rasas de baixo aspecto: protegem lemes e facilitam encalhe", table_cell)],
        [Paragraph("Vão Livre da Ponte (Bridgedeck)", table_cell_bold), Paragraph("H_bridge", table_cell), Paragraph("0,78 m", table_cell), Paragraph("Evita batidas de água sob o salão central na travessia de Itaparica", table_cell)],
        [Paragraph("Deslocamento Carregado (100%)", table_cell_bold), Paragraph("Δ", table_cell), Paragraph("8.000 kg (8,0 t)", table_cell), Paragraph("4.000 kgf por casco (~3,90 m³ de água salgada por bordo)", table_cell)],
        [Paragraph("Coeficiente Prismático Longitudinal", table_cell_bold), Paragraph("Cp", table_cell), Paragraph("0,62", table_cell), Paragraph("Distribuição ideal para velocidades de transição de 8 a 12 nós", table_cell)],
    ]
    t_dim = Table(dim_data, colWidths=[140, 50, 95, 202])
    t_dim.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), primary_color),
        ('ALIGN', (0,0), (-1,-1), 'LEFT'),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, light_bg]),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
    ]))
    story.append(t_dim)
    
    story.append(PageBreak())

    # --- 3. ESTUDO DE PESOS E CENTROS ---
    story.append(Paragraph("3. Balanço de Pesos e Centros de Gravidade", h1_style))
    story.append(Paragraph(
        "O controle rigoroso de pesos é determinante para o desempenho do catamarã. A regra mestra adotada é a "
        "<b>concentração dos pesos pesados a meia-nau</b>, minimizando o momento de inércia longitudinal e prevenindo o "
        "efeito de caturro (<i>hobby-horsing</i>).",
        body_style
    ))

    weight_data = [
        [Paragraph("Item / Grupo de Peso", table_cell_header), Paragraph("Peso (kg)", table_cell_header), Paragraph("% Total", table_cell_header), Paragraph("Posicionamento Estratégico", table_cell_header)],
        [Paragraph("<b>Casco Estrutural (2x cascos e anteparas)</b>", table_cell), Paragraph("2.350", table_cell), Paragraph("29,4%", table_cell), Paragraph("Compensado naval + epóxi + fitas axiais", table_cell)],
        [Paragraph("<b>Vigas de Ligação Transversal (Crossbeams)</b>", table_cell), Paragraph("850", table_cell), Paragraph("10,6%", table_cell), Paragraph("3 vigas principais em madeira laminada / reforço fibra", table_cell)],
        [Paragraph("<b>Casaria Central, Convés e Marcenaria</b>", table_cell), Paragraph("1.400", table_cell), Paragraph("17,5%", table_cell), Paragraph("Compensado leve 9/12 mm com acabamento acetinado", table_cell)],
        [Paragraph("<b>Mastração, Retranca, Estais e Velame</b>", table_cell), Paragraph("450", table_cell), Paragraph("5,6%", table_cell), Paragraph("Mastro apoiado na viga principal a meia-nau", table_cell)],
        [Paragraph("<b>Propulsão e Sistema Elétrico/Eletrônico</b>", table_cell), Paragraph("650", table_cell), Paragraph("8,1%", table_cell), Paragraph("2x motores nos compartimentos de popa + banco central", table_cell)],
        [Paragraph("<b>Equipamentos de Fundeio e Salvatagem</b>", table_cell), Paragraph("300", table_cell), Paragraph("3,8%", table_cell), Paragraph("Poço de corrente recuado na vante da casaria", table_cell)],
        [Paragraph("<b>SUBTOTAL PESO LEVE (Lightship)</b>", table_cell_bold), Paragraph("<b>6.000</b>", table_cell_bold), Paragraph("<b>75,0%</b>", table_cell_bold), Paragraph("<b>Barco pronto para navegação sem carga</b>", table_cell_bold)],
        [Paragraph("<b>Passageiros e Bagagens (10 pessoas)</b>", table_cell), Paragraph("1.000", table_cell), Paragraph("12,5%", table_cell), Paragraph("100 kg/pessoa nas cabines e salão", table_cell)],
        [Paragraph("<b>Água Doce (2x tanques de 250 L)</b>", table_cell), Paragraph("500", table_cell), Paragraph("6,3%", table_cell), Paragraph("Fundo central de cada casco (não altera trim)", table_cell)],
        [Paragraph("<b>Combustível Diesel (2x tanques de 150 L)</b>", table_cell), Paragraph("260", table_cell), Paragraph("3,3%", table_cell), Paragraph("A meia-nau/ré, junto aos motores", table_cell)],
        [Paragraph("<b>Mantimentos, Bebidas, Gelo e Consumíveis</b>", table_cell), Paragraph("240", table_cell), Paragraph("3,0%", table_cell), Paragraph("Cozinha central integrada", table_cell)],
        [Paragraph("<b>DESLOCAMENTO TOTAL CARREGADO (Δ)</b>", table_cell_bold), Paragraph("<b>8.000 kg</b>", table_cell_bold), Paragraph("<b>100,0%</b>", table_cell_bold), Paragraph("<b>8,00 toneladas métricas</b>", table_cell_bold)],
    ]
    t_weight = Table(weight_data, colWidths=[180, 65, 55, 187])
    t_weight.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), primary_color),
        ('ALIGN', (0,0), (-1,-1), 'LEFT'),
        ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
        ('ROWBACKGROUNDS', (0,1), (-1,-2), [colors.white, light_bg]),
        ('BACKGROUND', (0,7), (-1,7), colors.HexColor("#E2E8F0")),
        ('BACKGROUND', (0,-1), (-1,-1), colors.HexColor("#C3DAFE")),
        ('TOPPADDING', (0,0), (-1,-1), 3.5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 3.5),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
    ]))
    story.append(t_weight)
    story.append(Spacer(1, 10))

    # --- 4. PLANO VÉLICO E MOTORIZAÇÃO AUXILIAR ---
    story.append(Paragraph("4. Plano Vélico e Propulsão Auxiliar", h1_style))
    
    sail_prop_text = (
        "A armação adotada é <b>Sloop Fracionado 7/8</b> com buja autovirante para facilitar a operação por tripulação reduzida "
        "durante o turismo comercial. A relação Área Vélica / Deslocamento (SA/D) calculada é de <b>21,5</b>, garantindo excelente "
        "desempenho nas brisas térmicas típicas da BTS (10 a 16 nós)."
    )
    story.append(Paragraph(sail_prop_text, body_style))

    p_data = [
        [Paragraph("Vela Mestra (Main Sail)", table_cell_bold), Paragraph("52,0 m²", table_cell), Paragraph("Corte Square-Top com 3 rizes para controle de vento forte", table_cell)],
        [Paragraph("Buja Autovirante (Self-tacking Jib)", table_cell_bold), Paragraph("33,0 m²", table_cell), Paragraph("Trilho transversal na proa da casaria — manobras automáticas", table_cell)],
        [Paragraph("<b>ÁREA VÉLICA TOTAL BÁSICA</b>", table_cell_bold), Paragraph("<b>85,0 m²</b>", table_cell_bold), Paragraph("<b>SA/D = 21,5 (Cruzeiro Rápido e Seguro)</b>", table_cell_bold)],
        [Paragraph("Gennaker / Code 0 (Opcional)", table_cell_bold), Paragraph("75,0 m²", table_cell), Paragraph("Montado em gurupés na viga de proa para ventos de popa/folgados", table_cell)],
        [Paragraph("Altura do Mastro (Air Draft)", table_cell_bold), Paragraph("16,20 m", table_cell), Paragraph("Perfil em alumínio naval anodizado com 2 pares de cruzetas", table_cell)],
        [Paragraph("Motores Auxiliares (2x unidades)", table_cell_bold), Paragraph("2x 25 a 30 hp", table_cell), Paragraph("Diesel Marítimo com Saildrive ou motores de popa em poço", table_cell)],
        [Paragraph("Velocidade de Cruzeiro a Motor", table_cell_bold), Paragraph("7,0 a 7,5 nós", table_cell), Paragraph("Consumo estimado: 2,2 L/h por motor (alta autonomia)", table_cell)],
    ]
    t_prop = Table(p_data, colWidths=[180, 85, 222])
    t_prop.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#F7FAFC")),
        ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
        ('BACKGROUND', (0,2), (-1,2), colors.HexColor("#E2E8F0")),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 6),
        ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ]))
    story.append(t_prop)
    story.append(Spacer(1, 10))

    # --- 5. ARRANJO GERAL E LAYOUT DE ACOMODAÇÕES ---
    story.append(Paragraph("5. Arranjo Geral (Layout para 10 Pessoas)", h1_style))
    
    layout_points = [
        "<b>Casco de Boreste (BE):</b> 2 Cabines duplas fechadas (uma a vante e uma a ré) com camas de casal (1,95 m x 1,35 m), armários ventilados e 1 banheiro privativo central com ducha e vaso sanitário marítimo.",
        "<b>Casco de Bombordo (BB):</b> 2 Cabines duplas idênticas (vante e ré) + 1 banheiro central completo.",
        "<b>Salão Central (Ponte de Ligação):</b> Dinete ampla com mesa de jantar e sofá em 'U' conversível em cama de casal extra (completando as 10 vagas noturnas), cozinha náutica com fogão de 2 bocas, forno, pia dupla e geladeira 12V.",
        "<b>Cockpit Externo e Popa:</b> Área coberta por hardtop rígido com mesa para 10 pessoas, banco de comando com visão 360°, acessos fáceis às plataformas de banho e escadas telescópicas nas duas popas.",
        "<b>Área de Proa:</b> Amplo trampolim duplo em tela de poliéster com proteção UV entre os cascos, criando um solário de mais de 18 m² muito apreciado em passeios comerciais."
    ]
    for lp in layout_points:
        story.append(Paragraph(f"• {lp}", bullet_style))

    story.append(PageBreak())

    # --- 6. MÉTODO CONSTRUTIVO E ESTIMATIVA DE MATERIAIS ---
    story.append(Paragraph("6. Método Construtivo Econômico e Lista de Materiais", h1_style))
    story.append(Paragraph(
        "A tecnologia construtiva selecionada baseia-se em <b>painéis desenvolvidos de compensado naval impermeabilizados com resina epóxi</b> "
        "e reforçados estruturalmente com fitas e tecidos de fibra de vidro biaxial (método <i>plywood-epoxy multi-chine</i>). "
        "Essa escolha técnica reduz em até 40% o custo de construção em relação à laminação em fôrmas fêmeas de fibra de vidro.",
        body_style
    ))

    mat_data = [
        [Paragraph("Material / Insumo Estrutural", table_cell_header), Paragraph("Especificação Técnica", table_cell_header), Paragraph("Qtd. Estimada", table_cell_header), Paragraph("Aplicação no Barco", table_cell_header)],
        [Paragraph("Compensado Naval 12 mm", table_cell_bold), Paragraph("Madeira tratada (Louro Vermelho / Cedro Marajó)", table_cell), Paragraph("75 chapas", table_cell), Paragraph("Costados dos cascos, fundos e convés principal", table_cell)],
        [Paragraph("Compensado Naval 15 mm / 18 mm", table_cell_bold), Paragraph("Alta densidade, colagem fenólica WBP", table_cell), Paragraph("30 chapas", table_cell), Paragraph("Anteparas estruturais estanques e vigas transversais", table_cell)],
        [Paragraph("Compensado Naval 6 mm / 9 mm", table_cell_bold), Paragraph("Uso naval leve", table_cell), Paragraph("40 chapas", table_cell), Paragraph("Mobiliário interno, tetos e divisórias não estruturais", table_cell)],
        [Paragraph("Resina Epóxi Marítima", table_cell_bold), Paragraph("Sistema epóxi de média viscosidade + endurecedor lento", table_cell), Paragraph("380 kg", table_cell), Paragraph("Colagem estrutural, filetagem (fillets) e impregnação", table_cell)],
        [Paragraph("Tecido de Fibra de Vidro Biaxial (450 g/m²)", table_cell_bold), Paragraph("Fibra de vidro costurada E-Glass (+/- 45°)", table_cell), Paragraph("280 m²", table_cell), Paragraph("Laminação externa dos fundos e quinas para blindagem", table_cell)],
        [Paragraph("Fitas de Fibra de Vidro Unidirecional / Biaxial", table_cell_bold), Paragraph("Largura 150 mm / 300 mm", table_cell), Paragraph("350 metros", table_cell), Paragraph("Reforço das emendas de chapas (escarvas) e quinas internas", table_cell)],
        [Paragraph("Madeira Maciça Estrutural (Itaúba / Pequiá)", table_cell_bold), Paragraph("Seca em estufa, cortes aparelhados", table_cell), Paragraph("1,8 m³", table_cell), Paragraph("Longarinas, trincana, bico de proa e blocos de fixação", table_cell)],
        [Paragraph("Cargas e Aditivos (Microesferas / Silício)", table_cell_bold), Paragraph("Aerosil coloidal e microesferas ocas", table_cell), Paragraph("35 kg", table_cell), Paragraph("Preparações de massa epóxi estrutural e de acabamento", table_cell)],
    ]
    t_mat = Table(mat_data, colWidths=[135, 140, 65, 147])
    t_mat.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), primary_color),
        ('ALIGN', (0,0), (-1,-1), 'LEFT'),
        ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, light_bg]),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
    ]))
    story.append(t_mat)
    story.append(Spacer(1, 10))

    # --- 7. ETAPAS DE CONSTRUÇÃO E RECOMENDAÇÕES NORMAM ---
    story.append(Paragraph("7. Recomendações de Segurança, Normas e Próximos Passos", h1_style))
    
    sec_points = [
        "<b>Reserva de Flutuabilidade e Compartimentação:</b> Cada casco contará com 3 anteparas transversais totalmente estanques (proa, meia-nau e ré), garantindo flutuação mesmo com alagamento acidental de um compartimento.",
        "<b>Segurança segundo NORMAM-02/DPC (Navegação Interior e Costeira):</b> Dimensionamento de balaustrada perimetral de 600 mm, luzes de navegação homologadas, defensas, pirotécnicos e coletes classe III com apito e fita refletiva para 15 pessoas.",
        "<b>Proteção de Fundo e Acalado nas Praias da BTS:</b> As quilhas de baixo aspecto (LAR) são moldadas com reforço extra de madeira maciça e fibra grossa no bordo inferior, permitindo apoiar com segurança o catamarã em bancos de areia e rampas de maré."
    ]
    for sp in sec_points:
        story.append(Paragraph(f"• {sp}", bullet_style))

    story.append(Spacer(1, 8))
    
    # Caixa de Dica da Professora Mada
    mada_box_data = [[
        Paragraph(
            "<b>Nota da Professora Mada:</b> <i>'O catamarã em compensado e epóxi é uma das soluções de engenharia mais elegantes "
            "e econômicas que existem. O segredo da longevidade e do baixo peso dessa embarcação está na saturação e selamento "
            "perfeito de todas as peças de madeira antes da montagem final. Na Baía de Todos os Santos, esse barco terá uma "
            "performance fantástica nas brisas da tarde!'</i>",
            callout_style
        )
    ]]
    t_box = Table(mada_box_data, colWidths=[487])
    t_box.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#EBF8FF")),
        ('BOX', (0,0), (-1,-1), 1.5, secondary_color),
        ('TOPPADDING', (0,0), (-1,-1), 8),
        ('BOTTOMPADDING', (0,0), (-1,-1), 8),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('RIGHTPADDING', (0,0), (-1,-1), 10),
    ]))
    story.append(t_box)

    # Adicionar Prancha de Desenho Técnico
    story.append(PageBreak())
    story.append(Paragraph("8. Prancha Técnica Preliminar — Linhas e Arranjo", h1_style))
    story.append(Paragraph("Visualização integrada das vistas de Perfil, Plano de Convés, Seção Mestra e Plano de Balizas:", body_style))
    story.append(Spacer(1, 6))
    
    img_path = "/home/magdalena/eee/alunos/allan-braga/Desenho_Tecnico_Catamara_42.png"
    if os.path.exists(img_path):
        # Inserir imagem ajustada para a largura útil da página (487 pt)
        img = RLImage(img_path, width=487, height=324)
        story.append(img)
    
    doc.build(story, canvasmaker=NumberedCanvas)
    print(f"PDF gerado com sucesso em: {filename}")

if __name__ == '__main__':
    output_pdf = "/home/magdalena/eee/alunos/allan-braga/Projeto_Catamara_42_Allan_Braga.pdf"
    build_pdf(output_pdf)
