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_preenchido(pdf_path, titulo_barco, linhas_tabela, totais):
    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, leading=16, textColor=azul_brana, spaceAfter=2, alignment=1)
    sub_style = ParagraphStyle('DocSub', parent=styles['Normal'], fontName='Helvetica', fontSize=8, leading=10.5, 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.8, leading=8.5, textColor=colors.white, alignment=1)
    table_cell = ParagraphStyle('TableCell', parent=styles['Normal'], fontName='Helvetica', fontSize=6.8, leading=8.5, textColor=texto_escuro)
    table_cell_c = ParagraphStyle('TableCellC', parent=styles['Normal'], fontName='Helvetica', fontSize=6.8, leading=8.5, textColor=texto_escuro, alignment=1)
    table_cell_b = ParagraphStyle('TableCellB', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=6.8, leading=8.5, textColor=azul_brana, alignment=1)
    table_cell_bc = ParagraphStyle('TableCellBC', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=6.8, leading=8.5, textColor=azul_brana, alignment=1)
    resumo_style = ParagraphStyle('Resumo', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=8.5, leading=12, 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.15*cm))
    story.append(Paragraph("ESTUDO DE PESO — TABELA PREENCHIDA (EXERCÍCIO DS14)", title_style))
    story.append(Paragraph(f"<b>Embarcação:</b> {titulo_barco} | <b>Aluno/Projetista:</b> Carlos Silva | <b>Estaleiro Escola Embrião & Brana Projetos Navais</b>", 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>Item</b>", table_hdr),
        Paragraph("<b>Material</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]
    
    for row in linhas_tabela:
        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_c),
            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.8*cm, 4.4*cm, 1.8*cm, 1.8*cm, 1.8*cm, 1.8*cm, 1.8*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), 2),
        ('BOTTOMPADDING', (0,0), (-1,-1), 2),
        ('BACKGROUND', (0,-1), (-1,-1), azul_claro),
    ]))
    story.append(t)
    story.append(Spacer(1, 0.25*cm))
    
    # Linha de resumo exatamente como o rodapé da folha oficial
    w_tot, lcg_f, vcg_f, tcg_f = totais
    txt_resumo = (
        f"<b>Peso total = {w_tot:.1f} kg</b> &nbsp;&nbsp;·&nbsp;&nbsp; "
        f"<b>LCG = LMON ÷ Peso = {lcg_f:.3f} m</b> &nbsp;&nbsp;·&nbsp;&nbsp; "
        f"<b>VCG = VMON ÷ Peso = {vcg_f:.3f} m</b> &nbsp;&nbsp;·&nbsp;&nbsp; "
        f"<b>TCG = TMON ÷ Peso = {tcg_f:+.3f} m ≈ 0,00 m</b>"
    )
    story.append(Paragraph(txt_resumo, resumo_style))
    story.append(Spacer(1, 0.2*cm))
    
    nota_rodape = (
        "<i>Nota do formulário: Costado BB e Costado BE entram em linhas separadas para que o TCG de cada bordo possa ser diferente de zero: "
        "é assim que uma assimetria de construção ou de carga aparece na conta. Num barco simétrico os dois se cancelam e o TMON total dá zero.</i>"
    )
    story.append(Paragraph(nota_rodape, aviso_style))
    
    doc.build(story)

# 1. GERAR PARA O BOTE DE APOIO PESQUEIRO 5,80 M (PROJETO II / DAY SAILER FAO COM BOLINA)
# LOA: 5.80 m, BOA: 1.85 m, D: 0.72 m
# LCG popa=0, VCG base=0, TCG CL=0
linhas_bote = [
    ["Costado BB", "Compensado Naval 6 mm + Epóxi", "3,50", "18,2", "2,90", "0,45", "-0,85", f"{18.2*2.90:.1f}", f"{18.2*0.45:.1f}", f"{18.2*-0.85:.1f}"],
    ["Costado BE", "Compensado Naval 6 mm + Epóxi", "3,50", "18,2", "2,90", "0,45", "+0,85", f"{18.2*2.90:.1f}", f"{18.2*0.45:.1f}", f"{18.2*0.85:.1f}"],
    ["Fundo", "Compensado Naval 9 mm + Fibra 450g", "7,20", "61,2", "2,70", "0,10", "0,00", f"{61.2*2.70:.1f}", f"{61.2*0.10:.1f}", "0,0"],
    ["Espelho Popa", "Compensado Naval 18 mm + Epóxi", "0,85", "11,9", "0,08", "0,40", "0,00", f"{11.9*0.08:.1f}", f"{11.9*0.40:.1f}", "0,0"],
    ["Caverna de Proa", "Compensado 9 mm + Madeira de Lei", "0,50", "5,5", "4,80", "0,48", "0,00", f"{5.5*4.80:.1f}", f"{5.5*0.48:.1f}", "0,0"],
    ["Caverna de Popa", "Compensado 9 mm + Madeira de Lei", "0,70", "6,5", "1,00", "0,35", "0,00", f"{6.5*1.00:.1f}", f"{6.5*0.35:.1f}", "0,0"],
    ["Caverna Central", "Compensado 9 mm + Madeira de Lei", "0,90", "8,0", "2,90", "0,38", "0,00", f"{8.0*2.90:.1f}", f"{8.0*0.38:.1f}", "0,0"],
    ["Plataforma Popa", "Compensado Naval 9 mm antiderrapante", "1,20", "8,5", "0,60", "0,45", "0,00", f"{8.5*0.60:.1f}", f"{8.5*0.45:.1f}", "0,0"],
    ["Plataforma Proa", "Compensado Naval 9 mm estanque", "1,50", "10,5", "5,00", "0,60", "0,00", f"{10.5*5.00:.1f}", f"{10.5*0.60:.1f}", "0,0"],
    ["Banco", "Compensado Naval 9 mm c/ flutuadores", "1,80", "12,6", "2,60", "0,38", "0,00", f"{12.6*2.60:.1f}", f"{12.6*0.38:.1f}", "0,0"],
    ["Tripulante 1", "Pescador / Timoneiro", "—", "80,0", "1,20", "0,65", "-0,30", f"{80.0*1.20:.1f}", f"{80.0*0.65:.1f}", f"{80.0*-0.30:.1f}"],
    ["Tripulante 2", "Proeiro / Companheiro", "—", "80,0", "3,80", "0,65", "+0,30", f"{80.0*3.80:.1f}", f"{80.0*0.65:.1f}", f"{80.0*0.30:.1f}"],
    ["Caixa Bolina", "Compensado 12 mm + Bolina adaga", "0,80", "14,0", "2,85", "0,25", "0,00", f"{14.0*2.85:.1f}", f"{14.0*0.25:.1f}", "0,0"]
]

w_tot_b = sum(float(r[3].replace(',', '.')) for r in linhas_bote)
lmon_tot_b = sum(float(r[7].replace(',', '.')) for r in linhas_bote)
vmon_tot_b = sum(float(r[8].replace(',', '.')) for r in linhas_bote)
tmon_tot_b = sum(float(r[9].replace(',', '.')) for r in linhas_bote)
lcg_f_b = lmon_tot_b / w_tot_b
vcg_f_b = vmon_tot_b / w_tot_b
tcg_f_b = tmon_tot_b / w_tot_b

linhas_bote.append([
    "TOTAL", "—", "21,75 m²", f"{w_tot_b:.1f}", f"{lcg_f_b:.2f}", f"{vcg_f_b:.2f}", f"{tcg_f_b:.2f}",
    f"{lmon_tot_b:.1f}", f"{vmon_tot_b:.1f}", f"{tmon_tot_b:.1f}"
])

gerar_exercicio_ds14_preenchido(
    '/home/magdalena/eee/alunos/carlos-silva/projetos/II_02_Bote_Apoio_Pesqueiro_5.8m/Exercicio_DS14_Estudo_de_Peso_Bote_5.8m.pdf',
    'Bote de Apoio Pesqueiro 5,80 m (Projeto II)',
    linhas_bote,
    (w_tot_b, lcg_f_b, vcg_f_b, tcg_f_b)
)

# 2. GERAR PARA O SAVEIRO TESOURO DA BAÍA 12,0 M (GRUPO 2)
# LOA: 12.00 m, BOA: 4.36 m, Pontal: 1.90 m
# Adaptando exatamente aos 13 itens da folha oficial DS14
linhas_saveiro = [
    ["Costado BB", "Pau-Roxo (Roxinho) 28 mm", "17,05", "310,0", "5,55", "1,65", "-1,85", f"{310.0*5.55:.1f}", f"{310.0*1.65:.1f}", f"{310.0*-1.85:.1f}"],
    ["Costado BE", "Pau-Roxo (Roxinho) 28 mm", "17,05", "310,0", "5,55", "1,65", "+1,85", f"{310.0*5.55:.1f}", f"{310.0*1.65:.1f}", f"{310.0*1.85:.1f}"],
    ["Fundo", "Cedro-Rosa 25 mm + Quilha Massaranduba", "36,00", "984,0", "5,15", "0,35", "0,00", f"{984.0*5.15:.1f}", f"{984.0*0.35:.1f}", "0,0"],
    ["Espelho Popa", "Cedro / Pau-Roxo 16 mm (Área Real)", "2,35", "74,0", "0,08", "1,80", "0,00", f"{74.0*0.08:.1f}", f"{74.0*1.80:.1f}", "0,0"],
    ["Caverna de Proa", "Massaranduba 25×175 mm (Baliza 28)", "1,49", "65,0", "10,84", "1,75", "0,00", f"{65.0*10.84:.1f}", f"{65.0*1.75:.1f}", "0,0"],
    ["Caverna de Popa", "Massaranduba 25×175 mm (Baliza 3)", "3,99", "155,0", "1,16", "1,45", "0,00", f"{155.0*1.16:.1f}", f"{155.0*1.45:.1f}", "0,0"],
    ["Caverna Central", "Massaranduba 25×175 mm (Baliza 6)", "4,20", "180,0", "6,00", "1,35", "0,00", f"{180.0*6.00:.1f}", f"{180.0*1.35:.1f}", "0,0"],
    ["Plataforma Popa", "Tijupá / Convés de Ré (Louro 16 mm)", "5,50", "65,0", "1,20", "2,10", "0,00", f"{65.0*1.20:.1f}", f"{65.0*2.10:.1f}", "0,0"],
    ["Plataforma Proa", "Convés de Vante e Bico (Louro 16 mm)", "6,20", "75,0", "10,20", "2,30", "0,00", f"{75.0*10.20:.1f}", f"{75.0*2.30:.1f}", "0,0"],
    ["Banco", "Bancadas Laterais de Passageiros", "5,80", "120,0", "5,20", "1,55", "0,00", f"{120.0*5.20:.1f}", f"{120.0*1.55:.1f}", "0,0"],
    ["Tripulante 1", "Mestre / Timoneiro", "—", "80,0", "1,50", "2,20", "-0,30", f"{80.0*1.50:.1f}", f"{80.0*2.20:.1f}", f"{80.0*-0.30:.1f}"],
    ["Tripulante 2", "Proeiro / Marinheiro de Vante", "—", "80,0", "8,50", "2,10", "+0,30", f"{80.0*8.50:.1f}", f"{80.0*2.10:.1f}", f"{80.0*0.30:.1f}"],
    ["Caixa Bolina", "Carlinga do Mastro + Encaixe da Quilha", "1,80", "85,0", "6,40", "0,80", "0,00", f"{85.0*6.40:.1f}", f"{85.0*0.80:.1f}", "0,0"]
]

w_tot_s = sum(float(r[3].replace(',', '.')) for r in linhas_saveiro)
lmon_tot_s = sum(float(r[7].replace(',', '.')) for r in linhas_saveiro)
vmon_tot_s = sum(float(r[8].replace(',', '.')) for r in linhas_saveiro)
tmon_tot_s = sum(float(r[9].replace(',', '.')) for r in linhas_saveiro)
lcg_f_s = lmon_tot_s / w_tot_s
vcg_f_s = vmon_tot_s / w_tot_s
tcg_f_s = tmon_tot_s / w_tot_s

linhas_saveiro.append([
    "TOTAL", "—", "99,63 m²", f"{w_tot_s:.1f}", f"{lcg_f_s:.2f}", f"{vcg_f_s:.2f}", f"{tcg_f_s:.2f}",
    f"{lmon_tot_s:.1f}", f"{vmon_tot_s:.1f}", f"{tmon_tot_s:.1f}"
])

gerar_exercicio_ds14_preenchido(
    '/home/magdalena/eee/alunos/carlos-silva/grupo-2-tesouro-da-baia/Exercicio_DS14_Estudo_de_Peso_Tesouro_da_Baia.pdf',
    'Saveiro Tesouro da Baía 12,00 m (Grupo 2)',
    linhas_saveiro,
    (w_tot_s, lcg_f_s, vcg_f_s, tcg_f_s)
)
print('Exercícios gerados com sucesso!')
