from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import colors

def gerar_pdf(caminho, titulo_doc, subtitulo_doc, secoes):
    doc = SimpleDocTemplate(caminho, pagesize=A4, rightMargin=36, leftMargin=36, topMargin=36, bottomMargin=36)
    styles = getSampleStyleSheet()
    
    title_style = ParagraphStyle(
        'DocTitle',
        parent=styles['Heading1'],
        fontSize=17,
        leading=21,
        textColor=colors.HexColor('#0f2d4a'),
        spaceAfter=4
    )
    subtitle_style = ParagraphStyle(
        'DocSub',
        parent=styles['Normal'],
        fontSize=9.5,
        leading=13,
        textColor=colors.HexColor('#555555'),
        spaceAfter=12
    )
    h2_style = ParagraphStyle(
        'H2',
        parent=styles['Heading2'],
        fontSize=12,
        leading=15,
        textColor=colors.HexColor('#1b4b72'),
        spaceBefore=8,
        spaceAfter=4
    )
    body_style = ParagraphStyle(
        'Body',
        parent=styles['Normal'],
        fontSize=9,
        leading=13,
        textColor=colors.HexColor('#222222'),
        spaceAfter=5
    )
    cell_style = ParagraphStyle(
        'Cell',
        parent=styles['Normal'],
        fontSize=8.5,
        leading=11,
        textColor=colors.HexColor('#222222')
    )
    cell_head = ParagraphStyle(
        'CellH',
        parent=styles['Normal'],
        fontSize=8.5,
        leading=11,
        fontName='Helvetica-Bold',
        textColor=colors.white
    )

    story = []
    story.append(Paragraph(titulo_doc, title_style))
    story.append(Paragraph(subtitulo_doc, subtitle_style))
    story.append(Spacer(1, 4))

    for titulo, tabela, texto in secoes:
        story.append(Paragraph(titulo, h2_style))
        if tabela:
            table_data = []
            table_data.append([Paragraph(h, cell_head) for h in tabela[0]])
            for row in tabela[1:]:
                table_data.append([Paragraph(str(c), cell_style) for c in row])
            t = Table(table_data, colWidths=[130, 80, 80, 230])
            t.setStyle(TableStyle([
                ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#0f2d4a')),
                ('ALIGN', (0,0), (-1,-1), 'LEFT'),
                ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
                ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')),
                ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#f8f9fa')]),
                ('TOPPADDING', (0,0), (-1,-1), 4),
                ('BOTTOMPADDING', (0,0), (-1,-1), 4),
            ]))
            story.append(t)
            story.append(Spacer(1, 6))
        if texto:
            for p in texto:
                story.append(Paragraph(p, body_style))
            story.append(Spacer(1, 4))

    doc.build(story)

# 1. Costa Cruiser Oceânica 25
secoes_costa = [
    (
        "1. Parametros Hidrodinamicos e Dimensoes do Casco",
        [
            ["Parametro", "Simbolo", "Valor", "Funcao / Justificativa Naval"],
            ["Comprimento Total", "LOA", "7,550 m", "Classe 25 pes, transportavel sem escolta rodoviaria"],
            ["Linha d'Agua", "LWL", "7,200 m", "Base para calculo de centros e esbeltez"],
            ["Boca Maxima", "BOA", "2,450 m", "Limite rodoviario nacional e estabilidade de forma"],
            ["Calado de Casco (DWL)", "T", "0,480 m", "Excelente acesso a bancos de areia e praias"],
            ["Deslocamento de Calculo", "Delta", "2.450 a 2.800 kg", "Referencia G2 (2,45 t) e Full-Load Ocean-7 (2,8 t)"]
        ],
        []
    ),
    (
        "2. Dimensionamento do Plano Velico e Apendices",
        [
            ["Item", "Unidade", "Valor de Projeto", "Observacoes Tecnicas"],
            ["Area Velica Nominal", "m2", "38,6 a 40,0 m2", "Armacao Sloop Fracionaria moderna com suporte a Kite"],
            ["Razao Area Velica / Sup. Molhada", "SA/Sw", "2,36 a 2,41", "Faixa de cruzeiro rapido oceanico (Larsson & Eliasson)"],
            ["Quilha Retratil KSS", "m2", "1,10 m2 (lamina)", "Bulbo de chumbo baseline 425 kg a 2,10 m de calado"],
            ["Leme (Dual Rudder)", "m2", "0,57 m2 (pa)", "Controle estavel com barco adernado ate 25 graus"]
        ],
        []
    ),
    (
        "3. Equilibrio Hidrodinamico e Estabilidade",
        [
            ["Criterio", "Unidade", "Valor Calculado", "Diagnostico de Engenharia"],
            ["Avanco do Centro Velico (Lead)", "% LWL", "13,0 %", "Dentro da faixa recomendada de 12% a 14% (leme neutro)"],
            ["Angulo de Dellenbaugh", "graus", "18,7 a 19,3 deg", "Perfeito no centro da faixa ideal (15,4 a 21,4 deg)"],
            ["Altura Metacentrica Inicial", "GM", "1,05 m", "Com quilha KSS estendida a 2,10 m"],
            ["Angulo de Anulacao (AVS)", "graus", "123,2 deg", "Autoadricavel alem de 90 deg (Norma ISO 12217 Categoria A/B)"]
        ],
        [
            "&bull; <b>Comportamento no Mar:</b> O equilíbrio entre o Centro de Esforço Vélico (CE) e o Centro de Resistência Lateral (CLR) garante um leme dócil sem tendência ardente.",
            "&bull; <b>Diretriz Operacional:</b> Quilha 100% estendida (2,10 m) para navegação oceânica à vela. Calado recolhido (0,48 m) exclusivo para águas rasas a motor elétrico."
        ]
    )
]

gerar_pdf(
    '/home/magdalena/eee/alunos/sidinei-costa/Estudo_Velico_Costa_Cruiser_25.pdf',
    'ESTUDO VELICO E EQUILIBRIO HIDRODINAMICO &bull; COSTA CRUISER 25 v4.2',
    'Projetista: Sidinei Costa &bull; BRANA Projetos Navais &bull; Outubro / 2026',
    secoes_costa
)

# 2. Teoboat Grupo 9
secoes_teo = [
    (
        "1. Parametros do Casco Quinado (1,90 m)",
        [
            ["Parametro", "Simbolo", "Valor", "Funcao / Justificativa"],
            ["Comprimento Total", "LOA", "1,900 m", "Porte compacto, transportavel em rack de teto"],
            ["Linha d'Agua", "LWL", "1,750 m", "Deslize progressivo"],
            ["Boca Maxima", "BOA", "0,980 m", "Razao L/B = 1,94 (altissima estabilidade inicial)"],
            ["Pontal Meio-Nau", "D", "0,360 m", "Altura segura e acessivel para criancas"],
            ["Deslocamento Total", "Delta", "55 a 85 kg", "Barco (20 kg) + Crianca (20 a 55 kg) + Palamenta"]
        ],
        []
    ),
    (
        "2. Plano Velico e Apendices Hidrodinamicos",
        [
            ["Item", "Unidade", "Valor de Projeto", "Observacoes Tecnicas"],
            ["Area Velica", "m2", "1,8 a 2,2 m2", "Vela circular pop-up de proa, sem retranca rigida"],
            ["Braco de Adernamento", "HA", "0,95 m", "Centro velico baixo reduzindo torque de tombamento"],
            ["Deriva Lateral (Biquilha)", "m", "0,25 m de calado", "Aletas duplas de popa, cockpit totalmente desimpedido"],
            ["Leme Basculante", "m2", "~0,04 m2", "Cana simples e reversao automatica ao tocar na praia"]
        ],
        []
    ),
    (
        "3. Equilibrio e Seguranca Pedagogica (Dellenbaugh)",
        [
            ["Criterio", "Unidade", "Valor Calculado", "Diagnostico de Engenharia"],
            ["Angulo de Dellenbaugh", "graus", "6,4 a 10,2 deg", "Super Stiff (plataforma estavel contra emborcamento)"],
            ["Altura Metacentrica", "GM", "0,98 a 1,15 m", "Inercia de flutuacao macica devido a boca larga de 0,98 m"],
            ["Avanco do Centro Velico", "Lead", "~13,0 %", "Vela centrada em harmonia com o plano lateral a ré"],
            ["Autonomia Assistida", "-", "6 alcas no costado", "Conexao direta com caiaque/canoa de escolta"]
        ],
        [
            "&bull; <b>Conceito Bicicleta de Rodinhas:</b> O veleiro praticamente nao aderna sob ventos de 6 a 12 nos (inclinacao de 6 a 10 deg), garantindo confianca psicologica e seguranca fisica para a crianca aprender os fundamentos da vela.",
            "&bull; <b>Cockpit Desimpedido:</b> A adocao da configuracao biquilha dispensa a caixa de bolina central, permitindo que a crianca fique confortavelmente sentada no fundo."
        ]
    )
]

gerar_pdf(
    '/home/magdalena/eee/grupos/grupo-9/Estudo_Velico_Teoboat_Grupo_9.pdf',
    'ESTUDO VELICO E EQUILIBRIO HIDRODINAMICO &bull; TEOBOAT (GRUPO 9)',
    'Projetistas: Karina Menezes, Monique, Carolina Sapucaia, Danrley e Sidnei &bull; EEE / BRANA &bull; Outubro / 2026',
    secoes_teo
)

print("PDFs de Estudo Vélico gerados com sucesso!")
