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_exercicio_ds14_carregado(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=12.5, leading=15.5, textColor=azul_brana, spaceAfter=2, alignment=1)
    sub_style = ParagraphStyle('DocSub', parent=styles['Normal'], fontName='Helvetica', fontSize=7.8, leading=10, textColor=colors.HexColor('#4B5563'), alignment=1)
    aviso_style = ParagraphStyle('Aviso', parent=styles['Normal'], fontName='Helvetica-Oblique', fontSize=6.5, leading=8.5, textColor=colors.HexColor('#6B7280'), alignment=1)
    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)
    table_cell_bc = ParagraphStyle('TableCellBC', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=6.5, leading=8, textColor=azul_brana, alignment=1)
    resumo_style = ParagraphStyle('Resumo', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=8.2, leading=11, textColor=azul_brana, alignment=1)

    story = []
    
    story.append(Paragraph("O conteúdo deste material é de uso exclusivo dos alunos matriculados no curso PPE-M1 do Brana. Este não pode ser reproduzido, copiado, vendido ou transferido. A reprodução total ou parcial de qualquer conteúdo é expressamente proibida e constitui crime de violação de Direito Autoral.", aviso_style))
    story.append(Spacer(1, 0.12*cm))
    story.append(Paragraph("ESTUDO DE PESO — TABELA PREENCHIDA: CONDIÇÃO OPERACIONAL CARREGADA", title_style))
    story.append(Paragraph("<b>Embarcação:</b> Saveiro Tesouro da Baía (12,00 m × 4,30 m) · <b>Lotação Plena:</b> 10 Passageiros + 3 Tripulantes (13 pessoas) + Lastro 550 kg", sub_style))
    story.append(Paragraph("<b>Aluno/Projetista:</b> Carlos Silva · Grupo 2 | <b>Estaleiro Escola Embrião & Brana Projetos Navais</b>", sub_style))
    story.append(Spacer(1, 0.12*cm))
    story.append(HRFlowable(width="100%", thickness=1.2, color=azul_brana, spaceBefore=1, spaceAfter=3))
    
    headers = [
        Paragraph("<b>Item / Elemento da Tabela DS14</b>", table_hdr),
        Paragraph("<b>Material / Especificação a Bordo</b>", table_hdr),
        Paragraph("<b>Área<br/>(m²)</b>", table_hdr),
        Paragraph("<b>Peso<br/>(kg)</b>", table_hdr),
        Paragraph("<b>LCG<br/>(m)</b>", table_hdr),
        Paragraph("<b>VCG<br/>(m)</b>", table_hdr),
        Paragraph("<b>TCG<br/>(m)</b>", table_hdr),
        Paragraph("<b>LMON<br/>(kg·m)</b>", table_hdr),
        Paragraph("<b>VMON<br/>(kg·m)</b>", table_hdr),
        Paragraph("<b>TMON<br/>(kg·m)</b>", table_hdr)
    ]
    t_data = [headers]
    
    # 13 linhas estritas da folha DS14 adaptadas para o carregamento com 13 pessoas e lastro de 550 kg:
    # 1. Costado BB
    # 2. Costado BE
    # 3. Fundo (+ quilha corrida + lastro 550 kg na base)
    # 4. Espelho Popa (+ leme de popa)
    # 5. Caverna de Proa (+ antepara colisão vante)
    # 6. Caverna de Popa (+ antepara estanque e motor 40 HP)
    # 7. Caverna Central (+ cavernas mestras)
    # 8. Plataforma Popa (tijupá + tanque diesel 300L)
    # 9. Plataforma Proa (convés vante + tanque água 400L)
    # 10. Banco (bancadas + 10 passageiros sentados)
    # 11. Tripulante 1 (Mestre / Timoneiro)
    # 12. Tripulante 2 (2 Marinheiros operacionais)
    # 13. Caixa Bolina (carlinga + mastro 14,5m e vela de pena 95m²)
    
    linhas = [
        ["Costado BB", "Pau-Roxo (Roxinho) 28 mm", "17,00", "308,0", "5,55", "1,65", "-1,82", f"{308.0*5.55:.1f}", f"{308.0*1.65:.1f}", f"{308.0*-1.82:.1f}"],
        ["Costado BE", "Pau-Roxo (Roxinho) 28 mm", "17,00", "308,0", "5,55", "1,65", "+1,82", f"{308.0*5.55:.1f}", f"{308.0*1.65:.1f}", f"{308.0*1.82:.1f}"],
        ["Fundo", "Cedro 25mm + Quilha + Lastro 550kg (z=0,08m)", "35,50", "1520,0", "5,17", "0,25", "0,00", f"{1520.0*5.17:.1f}", f"{1520.0*0.25:.1f}", "0,0"],
        ["Espelho Popa", "Cedro/Roxinho 16mm + Ferragens Leme", "2,30", "164,0", "0,12", "1,55", "0,00", f"{164.0*0.12:.1f}", f"{164.0*1.55:.1f}", "0,0"],
        ["Caverna de Proa", "Massaranduba + Antepara Colisão Vante", "1,48", "106,0", "10,84", "1,75", "0,00", f"{106.0*10.84:.1f}", f"{106.0*1.75:.1f}", "0,0"],
        ["Caverna de Popa", "Caverna Popa + Motor Diesel 40 HP", "3,95", "533,0", "2,62", "0,95", "0,00", f"{533.0*2.62:.1f}", f"{533.0*0.95:.1f}", "0,0"],
        ["Caverna Central", "Cavernas Meio-Navio + Longitudinais Fundo", "4,15", "965,0", "5,45", "1,15", "0,00", f"{965.0*5.45:.1f}", f"{965.0*1.15:.1f}", "0,0"],
        ["Plataforma Popa", "Tijupá Ré + Tanque Diesel 300 L (BB)", "5,40", "324,0", "3,28", "0,90", "-0,36", f"{324.0*3.28:.1f}", f"{324.0*0.90:.1f}", f"{324.0*-0.36:.1f}"],
        ["Plataforma Proa", "Convés Vante + Tanque Água 400 L (BE)", "6,10", "474,0", "7,33", "0,82", "+0,38", f"{474.0*7.33:.1f}", f"{474.0*0.82:.1f}", f"{474.0*0.38:.1f}"],
        ["Banco", "Bancadas + 10 Passageiros (10 × 80 kg)", "5,70", "918,0", "5,45", "1,80", "0,00", f"{918.0*5.45:.1f}", f"{918.0*1.80:.1f}", "0,0"],
        ["Tripulante 1", "Mestre / Timoneiro no leme", "—", "80,0", "1,50", "2,20", "0,00", f"{80.0*1.50:.1f}", f"{80.0*2.20:.1f}", "0,0"],
        ["Tripulante 2", "2 Marinheiros operacionais (proa e bordo)", "—", "160,0", "6,50", "2,05", "0,00", f"{160.0*6.50:.1f}", f"{160.0*2.05:.1f}", "0,0"],
        ["Caixa Bolina", "Carlinga + Mastro 14,5m e Vela Pena 95m²", "1,80", "635,0", "6,50", "5,45", "0,00", f"{635.0*6.50:.1f}", f"{635.0*5.45:.1f}", "0,0"]
    ]
    
    tot_w = sum(float(r[3].replace(',', '.')) for r in linhas)
    tot_lmon = sum(float(r[7].replace(',', '.')) for r in linhas)
    tot_vmon = sum(float(r[8].replace(',', '.')) for r in linhas)
    tot_tmon = sum(float(r[9].replace(',', '.')) for r in linhas)
    
    lcg = tot_lmon / tot_w
    vcg = tot_vmon / tot_w
    tcg = tot_tmon / tot_w
    
    linhas.append([
        "TOTAL", "—", "98,38 m²", f"{tot_w:.1f}", f"{lcg:.2f}", f"{vcg:.2f}", f"{tcg:.2f}",
        f"{tot_lmon:.1f}", f"{tot_vmon:.1f}", f"{tot_tmon:.1f}"
    ])
    
    for row in linhas:
        t_data.append([
            Paragraph(f"<b>{row[0]}</b>" if "TOTAL" in row[0] else row[0], table_cell_b if "TOTAL" in row[0] else table_cell),
            Paragraph(row[1], table_cell),
            Paragraph(row[2], table_cell_c),
            Paragraph(f"<b>{row[3]}</b>" if "TOTAL" in row[0] else row[3], table_cell_bc if "TOTAL" in row[0] else table_cell_c),
            Paragraph(row[4], table_cell_bc if "TOTAL" in row[0] else table_cell_c),
            Paragraph(row[5], table_cell_bc if "TOTAL" in row[0] else table_cell_c),
            Paragraph(row[6], table_cell_bc if "TOTAL" in row[0] else table_cell_c),
            Paragraph(f"<b>{row[7]}</b>" if "TOTAL" in row[0] else row[7], table_cell_bc if "TOTAL" in row[0] else table_cell_c),
            Paragraph(f"<b>{row[8]}</b>" if "TOTAL" in row[0] else row[8], table_cell_bc if "TOTAL" in row[0] else table_cell_c),
            Paragraph(f"<b>{row[9]}</b>" if "TOTAL" in row[0] else row[9], table_cell_bc if "TOTAL" in row[0] else table_cell_c)
        ])
        
    col_widths = [3.5*cm, 5.0*cm, 1.6*cm, 1.8*cm, 1.6*cm, 1.6*cm, 1.6*cm, 2.5*cm, 2.5*cm, 2.5*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,-2), [colors.white, cinza_fundo]),
        ('TOPPADDING', (0,0), (-1,-1), 1.6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 1.6),
        ('BACKGROUND', (0,-1), (-1,-1), azul_claro),
    ]))
    story.append(t)
    story.append(Spacer(1, 0.2*cm))
    
    txt_resumo = (
        f"<b>Peso total = {tot_w:.1f} kg (6,49 t operacional)</b> &nbsp;&nbsp;·&nbsp;&nbsp; "
        f"<b>LCG = LMON ÷ Peso = {lcg:.3f} m</b> &nbsp;&nbsp;·&nbsp;&nbsp; "
        f"<b>VCG = VMON ÷ Peso = {vcg:.3f} m</b> &nbsp;&nbsp;·&nbsp;&nbsp; "
        f"<b>TCG = TMON ÷ Peso = {tcg:+.3f} m ≈ 0,00 m</b>"
    )
    story.append(Paragraph(txt_resumo, resumo_style))
    story.append(Spacer(1, 0.15*cm))
    
    nota_rodape = (
        "<i>Síntese Operacional: Condição de Turismo com 13 pessoas a bordo (10 passageiros + 3 tripulantes), lastro fixo de 550 kg na linha de base (z=0,08 m), "
        "motor diesel 40 HP e mastro de 14,5 m. O LCG resultante de 5,302 m alinha-se com exatidão ao Centro de Carena (LCB = 5,320 m), mantendo Trim rigorosamente nulo (0,0°) "
        "e o TCG perfeitamente centrado garante banda zero em repouso.</i>"
    )
    story.append(Paragraph(nota_rodape, aviso_style))
    
    doc.build(story)

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