import os
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_tabela_similares_pesos_centros(pdf_path):
    doc = SimpleDocTemplate(
        pdf_path,
        pagesize=landscape(A4),
        leftMargin=1.2*cm,
        rightMargin=1.2*cm,
        topMargin=1.2*cm,
        bottomMargin=1.2*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 = colors.HexColor('#9A3231')
    
    title_style = ParagraphStyle('DocTitle', parent=styles['Heading1'], fontName='Helvetica-Bold', fontSize=13.5, leading=16.5, textColor=azul_brana, spaceAfter=2)
    sub_style = ParagraphStyle('DocSub', parent=styles['Normal'], fontName='Helvetica', fontSize=8, leading=10.5, textColor=colors.HexColor('#4B5563'))
    h2_style = ParagraphStyle('DocH2', parent=styles['Heading2'], fontName='Helvetica-Bold', fontSize=9, leading=11.5, textColor=vermelho, spaceBefore=4, spaceAfter=2)
    body_style = ParagraphStyle('DocBody', parent=styles['Normal'], fontName='Helvetica', fontSize=7.2, leading=9.5, textColor=texto_escuro)
    table_hdr = ParagraphStyle('TableHdr', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=6.5, leading=8, textColor=colors.white, alignment=1)
    table_cell = ParagraphStyle('TableCell', parent=styles['Normal'], fontName='Helvetica', fontSize=6.5, leading=8, textColor=texto_escuro)
    table_cell_c = ParagraphStyle('TableCellC', parent=styles['Normal'], fontName='Helvetica', fontSize=6.5, leading=8, textColor=texto_escuro, alignment=1)
    table_cell_b = ParagraphStyle('TableCellB', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=6.5, leading=8, textColor=azul_brana, alignment=1)
    table_cell_grp = ParagraphStyle('TableCellG', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=6.5, leading=8, textColor=vermelho)

    story = []
    
    # Cabeçalho
    story.append(Paragraph("TABELA DE ESTUDO DE SIMILARES: MEDIDAS, PESOS E CENTROS 3D (LCG, TCG, VCG)", title_style))
    story.append(Paragraph("<b>Projeto:</b> Saveiro Tesouro da Baía (Grupo 2) | <b>Equipe:</b> Carlos Silva, Cauã e Alessandra Feitosa | <b>Brana / EEE</b>", sub_style))
    story.append(Paragraph("<b>Convenção de Eixos:</b> LCG (X) medido da popa para vante (m); TCG (Y) na Linha de Centro (CL=0,00 m); VCG (Z) acima da Linha de Base na quilha (m).", sub_style))
    story.append(Spacer(1, 0.15*cm))
    story.append(HRFlowable(width="100%", thickness=1.2, color=azul_brana, spaceBefore=1, spaceAfter=4))
    
    headers = [
        Paragraph("<b>Parâmetro / Variável</b>", table_hdr),
        Paragraph("<b>1. Saveiro Day Use<br/>(12,0m BTS)</b>", table_hdr),
        Paragraph("<b>2. Saveiro É a Vida<br/>(12,2m Valença)</b>", table_hdr),
        Paragraph("<b>3. Island Packet 38<br/>(12,65m Cutter)</b>", table_hdr),
        Paragraph("<b>4. Shannon 38<br/>(11,51m Oceânico)</b>", table_hdr),
        Paragraph("<b>5. Dhow Tradicional<br/>(12,50m Índico)</b>", table_hdr),
        Paragraph("<b>6. Barco Rabelo<br/>(12,5m Douro)</b>", table_hdr),
        Paragraph("<b>MÉDIA DOS<br/>SIMILARES</b>", table_hdr),
        Paragraph("<b>PROJETO GRUPO 2<br/>Tesouro da Baía</b>", table_hdr)
    ]
    
    t_data = [headers]
    
    rows = [
        ("LOA (Comprimento Total)", "12,00 m", "12,20 m", "12,65 m", "11,51 m", "12,50 m", "12,50 m", "12,23 m", "12,00 m"),
        ("LWL (Linha d'Água)", "10,28 m", "10,50 m", "10,06 m", "9,40 m", "10,20 m", "10,60 m", "10,17 m", "10,00 m"),
        ("BOA (Boca Máxima)", "3,80 m", "3,75 m", "3,86 m", "3,51 m", "3,60 m", "3,10 m", "3,60 m", "4,36 m"),
        ("Calado de Projeto (T)", "1,10 m", "1,15 m", "1,52 m", "1,52 m", "1,20 m", "0,85 m", "1,22 m", "0,92 m"),
        ("Deslocamento Pleno (Δ)", "10.330 kg", "11.500 kg", "9.752 kg", "8.391 kg", "11.000 kg", "12.000 kg", "10.495 kg", "14.500 kg"),
        ("Peso da Estrutura Nua (Lightship)", "3.100 kg", "3.450 kg", "2.920 kg", "2.520 kg", "3.300 kg", "3.600 kg", "3.148 kg", "3.881 kg (c/ marg.)"),
        ("Lastro Fixo de Fundo", "3.200 kg", "3.500 kg", "4.082 kg", "3.402 kg", "3.200 kg", "2.500 kg", "3.314 kg", "4.200 kg"),
        ("Potência Instalada Nominal", "35 HP", "40 HP", "44 HP", "40 HP", "35 HP", "30 HP", "37,3 HP", "40 HP"),
        ("Área Vélica Nominal", "85,0 m²", "90,0 m²", "81,0 m²", "76,0 m²", "92,0 m²", "65,0 m²", "81,5 m²", "95,0 m² (Pena)"),
        ("— CENTROS DE GRAVIDADE (CG 3D) —", "", "", "", "", "", "", "", ""),
        ("LCG (da Popa para Vante)", "5,35 m", "5,45 m", "5,42 m", "5,05 m", "5,60 m", "5,55 m", "5,40 m", "5,25 m (Trim 0°)"),
        ("LCG / LOA (Posição Relativa)", "44,6%", "44,7%", "42,8%", "43,9%", "44,8%", "44,4%", "44,2%", "43,8% (Estabilidade)"),
        ("TCG (Desvio Transversal)", "0,00 m", "0,00 m", "0,00 m", "0,00 m", "0,00 m", "0,00 m", "0,00 m", "0,00 m (Banda 0°)"),
        ("VCG / KG (Altura da Linha de Base)", "1,15 m", "1,18 m", "1,22 m", "1,25 m", "1,16 m", "1,05 m", "1,17 m", "1,08 m"),
        ("VCG / Pontal (Posição Relativa)", "44,2%", "45,0%", "43,5%", "44,0%", "44,5%", "43,0%", "44,0%", "38,7% (Altíssimo GM)"),
        ("Altura Metacêntrica Inicial (GMt)", "1,05 m", "1,02 m", "1,15 m", "1,08 m", "1,12 m", "1,35 m", "1,13 m", "1,22 m (Excelente)"),
        ("— RAZÕES ADIMENSIONAIS —", "", "", "", "", "", "", "", ""),
        ("LOA / BOA", "3,16", "3,25", "3,28", "3,28", "3,47", "4,03", "3,41", "2,75 (Super Estável)"),
        ("DLR (Deslocamento-Comprimento)", "266", "278", "267", "283", "288", "282", "277", "404 (Carga Plena)")
    ]
    
    for r in rows:
        if "—" in r[0]:
            row_cells = [Paragraph(f"<b>{r[0]}</b>", table_cell_grp)] + [Paragraph("", table_cell)]*8
            t_data.append(row_cells)
            continue
        row_cells = [Paragraph(r[0], table_cell)]
        for val in r[1:-1]:
            row_cells.append(Paragraph(val, table_cell_c))
        row_cells.append(Paragraph(r[-1], table_cell_b))
        t_data.append(row_cells)
        
    col_widths = [4.8*cm] + [2.8*cm]*7 + [2.9*cm]
    t = Table(t_data, colWidths=col_widths)
    t.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),
        ('BACKGROUND', (-1,1), (-1,-1), azul_claro),
    ]))
    
    story.append(t)
    story.append(Spacer(1, 0.2*cm))
    
    # Análise das Medidas de Pesos e Centros
    story.append(Paragraph("ANÁLISE COMPARATIVA DE PESOS E CENTROS 3D (LCG, TCG, VCG)", h2_style))
    analise_txt = (
        "• <b>LCG (Posição Longitudinal do CG):</b> Todos os similares concentram o centro de gravidade entre <b>42,8% e 44,8% do LOA</b> a partir da popa (média de 5,40 m). O Tesouro da Baía situa o LCG em <b>5,25 m</b> (43,8%), perfeitamente alinhado com o Centro de Carena LCB (5,32 m), garantindo equilíbrio e trim nulo em repouso.<br/>"
        "• <b>TCG (Posição Transversal do CG):</b> Todas as embarcações operam em simetria de projeto (TCG = 0,00 m). No Tesouro da Baía, o tanque de combustível a Bombordo (-117 kgf·m) e cozinha (-198 kgf·m) são rigorosamente equilibrados a Boreste pelo tanque de água doce (+180 kgf·m) e banco de baterias (+30 kgf·m), mantendo banda zero.<br/>"
        "• <b>VCG (Centro Vertical / KG):</b> A média dos similares coloca o VCG a <b>1,17 m acima da quilha</b> (cerca de 44% do pontal). No Tesouro da Baía, a concentração de <b>4.200 kg de lastro de chumbo/ferro</b> no fundo da quilha (z = 0,20 m) puxa o centro de gravidade total para baixo: <b>VCG = 1,08 m</b> (apenas 38,7% do pontal).<br/>"
        "• <b>Altura Metacêntrica Resultante (GMt = 1,22 m):</b> Enquanto a média dos veleiros similares possui GMt em torno de 1,13 m, a boca generosa de 4,36 m do Tesouro da Baía eleva o metacentro (KM = 2,30 m), gerando uma estabilidade inicial extraordinária para suportar a vela de pena de 95 m²."
    )
    story.append(Paragraph(analise_txt, body_style))
    story.append(Spacer(1, 0.15*cm))
    story.append(HRFlowable(width="100%", thickness=0.8, color=cinza_borda, spaceBefore=2, spaceAfter=4))
    story.append(Paragraph("<i>Relatório Técnico Emitido pelo Sistema Brana / Estaleiro Escola Embrião — Projeto Grupo 2.</i>", ParagraphStyle('RodFinal', parent=body_style, fontSize=7, textColor=colors.HexColor('#6B7280'), alignment=1)))
    
    doc.build(story)

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