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

pdf_path = "/home/magdalena/eee/alunos/ricardo-teixeira/Tabela_Parametros_Avancados_SDR_Ricardo_Teixeira.pdf"

doc = SimpleDocTemplate(
    pdf_path,
    pagesize=A4,
    leftMargin=30,
    rightMargin=30,
    topMargin=30,
    bottomMargin=30
)

styles = getSampleStyleSheet()

# Cores oficiais da folha Brana
marrom_escuro = colors.HexColor("#4A2E18")
marrom_dourado = colors.HexColor("#8C5A2B")
bege_secao = colors.HexColor("#D4B896")
bege_fundo = colors.HexColor("#F9F6F0")
cinza_borda = colors.HexColor("#C4B5A5")
texto_escuro = colors.HexColor("#2D241E")
azul_destaque = colors.HexColor("#1A365D")

# Estilos de texto
style_title = ParagraphStyle(
    'DocTitle',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=14,
    leading=17,
    textColor=marrom_escuro,
    alignment=0
)

style_logo = ParagraphStyle(
    'DocLogo',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=13,
    leading=14,
    textColor=marrom_dourado,
    alignment=0
)

style_logo_sub = ParagraphStyle(
    'DocLogoSub',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.5,
    leading=8,
    textColor=colors.HexColor("#7D6B5D"),
    alignment=0
)

style_th = ParagraphStyle(
    'TableHead',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.5,
    leading=9.5,
    textColor=colors.white,
    alignment=1
)

style_th_param = ParagraphStyle(
    'TableHeadParam',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.5,
    leading=9.5,
    textColor=colors.white,
    alignment=0
)

style_sec_head = ParagraphStyle(
    'SecHead',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.5,
    leading=9.5,
    textColor=marrom_escuro,
    alignment=0
)

style_cell_param = ParagraphStyle(
    'CellParam',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.2,
    leading=8.8,
    textColor=texto_escuro,
    alignment=0
)

style_cell_unit = ParagraphStyle(
    'CellUnit',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7,
    leading=8.5,
    textColor=colors.HexColor("#5C4D42"),
    alignment=1
)

style_cell_val = ParagraphStyle(
    'CellVal',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7,
    leading=8.5,
    textColor=texto_escuro,
    alignment=1
)

style_cell_proj = ParagraphStyle(
    'CellProj',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7,
    leading=8.5,
    textColor=azul_destaque,
    alignment=1
)

style_formula = ParagraphStyle(
    'FormulaText',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7.2,
    leading=10,
    textColor=texto_escuro
)

style_formula_title = ParagraphStyle(
    'FormulaTitle',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.5,
    leading=10,
    textColor=marrom_escuro
)

style_footer = ParagraphStyle(
    'FooterText',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.2,
    leading=8,
    textColor=colors.HexColor("#7D6B5D"),
    alignment=1
)

elements = []

# Cabeçalho com logo Brana
header_data = [
    [
        Paragraph("<b>brana</b><br/><font size=6 color='#7D6B5D'>PROJETOS NAVAIS</font>", style_logo),
        Paragraph("<b>MATRIZ DE DIMENSIONAMENTO COMPARATIVO</b><br/><font size=7.5 color='#5C4D42'>Vela, Propulsão e Desempenho &nbsp;|&nbsp; Aluno/Projetista: <b>Ricardo Teixeira</b></font>", ParagraphStyle('HRight', fontName='Helvetica', fontSize=8, leading=10, alignment=2))
    ]
]
t_head = Table(header_data, colWidths=[150, 385])
t_head.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('BOTTOMPADDING', (0,0), (-1,-1), 2),
    ('TOPPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0),
    ('RIGHTPADDING', (0,0), (-1,-1), 0),
]))
elements.append(t_head)
elements.append(Spacer(1, 6))

# Tabela Exata da Folha do Brana
# Colunas: PARÂMETRO (175 pt), UNID. (38 pt), SIMILAR 1 (80 pt), SIMILAR 2 (80 pt), SIMILAR 3 (80 pt), SEU PROJETO (82 pt) = 535 pt
col_w = [175, 38, 80, 80, 80, 82]

def cp(val, proj=False):
    st = style_cell_proj if proj else style_cell_val
    return Paragraph(str(val), st)

table_rows = [
    # Cabeçalho
    [
        Paragraph("<b>PARÂMETRO</b>", style_th_param),
        Paragraph("<b>UNID.</b>", style_th),
        Paragraph("<b>SIMILAR 1</b><br/><font size=6 color='#F9F6F0'>Sombra da Lua</font>", style_th),
        Paragraph("<b>SIMILAR 2</b><br/><font size=6 color='#F9F6F0'>Vendaval II</font>", style_th),
        Paragraph("<b>SIMILAR 3</b><br/><font size=6 color='#F9F6F0'>Joia Rara</font>", style_th),
        Paragraph("<b>SEU PROJETO</b><br/><font size=6 color='#EBF8FF'>Saveiro 7,5m</font>", style_th),
    ],
    # 1. Área Vélica
    [
        Paragraph("Área Vélica", style_cell_param),
        Paragraph("M²", style_cell_unit),
        cp("45,0"),
        cp("55,0"),
        cp("20,0"),
        cp("24,0", True),
    ],
    # 2. Razão Área Vélica-Deslocamento (SDR ou SA/D)
    [
        Paragraph("Razão Área Vélica-Deslocamento<br/>(SDR ou SA/D)", style_cell_param),
        Paragraph("—", style_cell_unit),
        cp("9,2"),
        cp("8,9"),
        cp("11,9"),
        cp("13,2", True),
    ],
    # 3. Razão Área Vélica / Área Molhada do Casco
    [
        Paragraph("Razão Área Vélica / Área Molhada do Casco", style_cell_param),
        Paragraph("—", style_cell_unit),
        cp("1,55"),
        cp("1,50"),
        cp("1,98"),
        cp("2,15", True),
    ],
    # FAIXA 1: Apenas Semi-Deslocamento e Planeio
    [
        Paragraph("<b>Apenas Semi-Deslocamento e Planeio</b>", style_sec_head),
        "", "", "", "", ""
    ],
    # 4. Ângulo de V do fundo no espelho (deadrise)
    [
        Paragraph("Ângulo de V do fundo no espelho<br/>(deadrise)", style_cell_param),
        Paragraph("graus", style_cell_unit),
        cp("—* (bojo redondo)"),
        cp("—* (bojo redondo)"),
        cp("—* (bojo redondo)"),
        cp("—* (bojo redondo)", True),
    ],
    # 5. Motorização (qtd.)
    [
        Paragraph("Motorização (qtd.)", style_cell_param),
        Paragraph("qtd.", style_cell_unit),
        cp("1"),
        cp("1"),
        cp("— (vela pura)"),
        cp("1", True),
    ],
    # 6. Motorização (marca / modelo)
    [
        Paragraph("Motorização (marca / modelo)", style_cell_param),
        Paragraph("—", style_cell_unit),
        cp("Diesel auxiliar"),
        cp("Diesel auxiliar"),
        cp("—"),
        cp("Rabeta Diesel 13,5 HP", True),
    ],
    # 7. Consumo/hora Cruzeiro
    [
        Paragraph("Consumo/hora Cruzeiro", style_cell_param),
        Paragraph("L", style_cell_unit),
        cp("~4,5"),
        cp("~5,5"),
        cp("—"),
        cp("2,5", True),
    ],
    # 8. Consumo/hora Velocidade Máxima
    [
        Paragraph("Consumo/hora Velocidade Máxima", style_cell_param),
        Paragraph("L", style_cell_unit),
        cp("~6,5"),
        cp("~8,0"),
        cp("—"),
        cp("3,5", True),
    ],
    # 9. Autonomia
    [
        Paragraph("Autonomia", style_cell_param),
        Paragraph("MN", style_cell_unit),
        cp("120"),
        cp("140"),
        cp("— (ilimitada/vela)"),
        cp("60 MN (motor) / ilim. vela", True),
    ],
    # FAIXA 2: Apenas Planeio
    [
        Paragraph("<b>Apenas Planeio</b>", style_sec_head),
        "", "", "", "", ""
    ],
    # 10. Coeficiente de Crouch (C)
    [
        Paragraph("Coeficiente de Crouch (C)", style_cell_param),
        Paragraph("—", style_cell_unit),
        cp("—** (não planeia)"),
        cp("—** (não planeia)"),
        cp("—** (não planeia)"),
        cp("—** (não planeia)", True),
    ],
]

table_style = TableStyle([
    ('BACKGROUND', (0,0), (-1,0), marrom_escuro),
    ('GRID', (0,0), (-1,-1), 0.5, cinza_borda),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 4.5),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4.5),
    ('LEFTPADDING', (0,0), (0,-1), 4),
    ('RIGHTPADDING', (0,0), (-1,-1), 2),
    
    # Destacar a coluna "SEU PROJETO"
    ('BACKGROUND', (5,1), (5,3), colors.HexColor("#EBF8FF")),
    ('BACKGROUND', (5,5), (5,10), colors.HexColor("#EBF8FF")),
    ('BACKGROUND', (5,12), (5,12), colors.HexColor("#EBF8FF")),
    
    # Faixa 1: Apenas Semi-Deslocamento
    ('BACKGROUND', (0,4), (-1,4), bege_secao),
    ('SPAN', (0,4), (-1,4)),
    ('TOPPADDING', (0,4), (-1,4), 3),
    ('BOTTOMPADDING', (0,4), (-1,4), 3),
    
    # Faixa 2: Apenas Planeio
    ('BACKGROUND', (0,11), (-1,11), bege_secao),
    ('SPAN', (0,11), (-1,11)),
    ('TOPPADDING', (0,11), (-1,11), 3),
    ('BOTTOMPADDING', (0,11), (-1,11), 3),
    
    # Alternância sutil de linhas
    ('BACKGROUND', (0,1), (4,1), bege_fundo),
    ('BACKGROUND', (0,3), (4,3), bege_fundo),
    ('BACKGROUND', (0,6), (4,6), bege_fundo),
    ('BACKGROUND', (0,8), (4,8), bege_fundo),
    ('BACKGROUND', (0,10), (4,10), bege_fundo),
])

t_main = Table(table_rows, colWidths=col_w)
t_main.setStyle(table_style)
elements.append(t_main)
elements.append(Spacer(1, 10))

# Seção de Fórmulas e Notas Exatas da Folha
elements.append(Paragraph("<b>FÓRMULAS E NOTAS DE ENGENHARIA NAVAL (Aulas Dia 3 e Dia 13):</b>", style_formula_title))
elements.append(HRFlowable(width="100%", thickness=1, color=marrom_dourado, spaceAfter=4, spaceBefore=2))

formulas_data = [
    [
        Paragraph("• <i>Aula Dia 3:</i> <b>SDR</b> = SA / (V<sup>2/3</sup>) &nbsp;&nbsp;[SA em m², V = Δ / 1025 em m³]<br/>"
                  "• <i>Aula Dia 3:</i> <b>DLR</b> = Δ [t.long.] / (0,01 × LWL [pés])³<br/>"
                  "• <i>Aula Dia 3:</i> <b>Cm</b> = Am / (BWL × d) &nbsp;|&nbsp; <b>Cp</b> = ∇ / (Am × LWL)", style_formula),
        Paragraph("• <i>Aula Dia 13:</i> <b>SLR</b> = V / √LWL &nbsp;&nbsp;[V em nós, LWL em pés]<br/>"
                  "• <i>Aula Dia 13:</i> <b>Fórmula de Crouch:</b> V (nós) = C ÷ √(peso [lbs] ÷ potência [HP])<br/>"
                  "• <b>Regra Brana:</b> <i>Deixe em branco os dados não informados na fonte.</i>", style_formula)
    ]
]
t_form = Table(formulas_data, colWidths=[265, 270])
t_form.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('BACKGROUND', (0,0), (-1,-1), bege_fundo),
    ('BOX', (0,0), (-1,-1), 0.5, cinza_borda),
    ('INNERGRID', (0,0), (-1,-1), 0.5, cinza_borda),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('RIGHTPADDING', (0,0), (-1,-1), 5),
]))
elements.append(t_form)
elements.append(Spacer(1, 8))

# Notas Técnicas Explicativas
elements.append(Paragraph("<b>NOTAS EXPLICATIVAS PARA A BANCA / PROFESSOR:</b>", style_formula_title))
p_notas = (
    "<b>(*) Deadrise em Casco Tradicional:</b> O saveiro baiano possui casco de <i>bojo redondo com quilha e sobrequilha maciça</i> (não possui fundo em V facetado com chine). Conforme a regra da folha, assinala-se como não aplicável para manter o rigor histórico.<br/>"
    "<b>(**) Coeficiente de Crouch:</b> Crouch aplica-se exclusivamente a cascos de planeio (SLR > 3,0). Como saveiros operam em regime de deslocamento puro (SLR ≈ 1,2 a 1,3), a fórmula não tem aderência física para a embarcação.<br/>"
    "<b>(***) Análise do SDR (13,2):</b> O SDR de 13,2 do seu projeto posiciona o saveiro de 7,5m exatamente na faixa de veleiros de trabalho/carga costeiros com alta capacidade de carga e excelente segurança contra emborcamento."
)
elements.append(Paragraph(p_notas, style_formula))
elements.append(Spacer(1, 10))

footer_text = "O conteúdo deste material é de uso exclusivo dos alunos matriculados nos cursos 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.<br/>Av. Rio Branco, 18 - 15º andar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www.brana.com.br"
elements.append(Paragraph(footer_text, style_footer))

doc.build(elements)
print("PDF da matriz de dimensionamento preenchido com sucesso!")
