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/Estudo_Similares_Dimensoes_Principais_Ricardo_Teixeira.pdf"

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

styles = getSampleStyleSheet()

# Cores oficiais da folha Brana enviada
vermelho_escuro = colors.HexColor("#7B1113")
vermelho_brana = colors.HexColor("#9E1B1E")
bege_secao = colors.HexColor("#EADBC8")
bege_fundo = colors.HexColor("#FAF7F2")
cinza_linhas = colors.HexColor("#C7B299")
texto_escuro = colors.HexColor("#2B1E16")
azul_proj = colors.HexColor("#1A365D")

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

style_subtitle = ParagraphStyle(
    'DocSub',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7,
    leading=9,
    textColor=colors.HexColor("#5C4033"),
    alignment=0
)

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

style_logo_sub = ParagraphStyle(
    'DocLogoSub',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6,
    leading=7.5,
    textColor=colors.HexColor("#7A5C4D"),
    alignment=2
)

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

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

style_sec_head = ParagraphStyle(
    'SecHead',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7,
    leading=8.5,
    textColor=vermelho_escuro,
    alignment=0
)

style_cell_param = ParagraphStyle(
    'CP',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=6.5,
    leading=8,
    textColor=texto_escuro,
    alignment=0
)

style_cell_unit = ParagraphStyle(
    'CU',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.2,
    leading=7.5,
    textColor=colors.HexColor("#6E5D53"),
    alignment=1
)

style_cell_val = ParagraphStyle(
    'CV',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.5,
    leading=8,
    textColor=texto_escuro,
    alignment=1
)

style_cell_val_name = ParagraphStyle(
    'CVN',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=6.5,
    leading=8,
    textColor=vermelho_escuro,
    alignment=1
)

style_cell_proj = ParagraphStyle(
    'CProj',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=6.5,
    leading=8,
    textColor=azul_proj,
    alignment=1
)

style_footer = ParagraphStyle(
    'Foot',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=5.8,
    leading=7.5,
    textColor=colors.HexColor("#6E5D53"),
    alignment=1
)

style_notes = ParagraphStyle(
    'Note',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.2,
    leading=8,
    textColor=texto_escuro
)

elements = []

# Cabeçalho com logo Brana
head_data = [
    [
        Paragraph("<b>ESTUDO DE SIMILARES E DIMENSÕES PRINCIPAIS</b><br/>"
                  "<font size=6.5 color='#5C4033'>Tabela comparativa de embarcações, preencher à mão &nbsp;|&nbsp; unidades no sistema métrico (SI): metros, kilos, litros e etc</font><br/>"
                  "<font size=6 color='#7B1113'>Projetista / Aluno: <b>Ricardo Teixeira</b> &nbsp;|&nbsp; Saveiro de Carga Tradicional 7,50 m × 2,50 m</font>", style_title),
        Paragraph("<font color='#9E1B1E'><b>brana</b></font><br/><font size=5.5 color='#7A5C4D'>PROJETOS NAVAIS</font>", style_logo)
    ]
]
t_head = Table(head_data, colWidths=[440, 107])
t_head.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('BOTTOMPADDING', (0,0), (-1,-1), 1),
    ('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, 4))

# Colunas: Parâmetro (175 pt), Unid (32 pt), Sim 1 (85 pt), Sim 2 (85 pt), Sim 3 (85 pt), Seu Projeto (85 pt) = 547 pt
col_w = [175, 32, 85, 85, 85, 85]

def c_val(v, proj=False, name=False):
    if proj:
        st = style_cell_proj
    elif name:
        st = style_cell_val_name
    else:
        st = style_cell_val
    return Paragraph(str(v), st)

table_data = [
    # Cabeçalho da Tabela
    [
        Paragraph("<b>PARÂMETRO</b>", style_th_param),
        Paragraph("<b>UNID.</b>", style_th),
        Paragraph("<b>SIMILAR 1</b>", style_th),
        Paragraph("<b>SIMILAR 2</b>", style_th),
        Paragraph("<b>SIMILAR 3</b>", style_th),
        Paragraph("<b>SEU PROJETO</b>", style_th),
    ],
    # 1. Embarcação
    [
        Paragraph("Embarcação (estaleiro / modelo)", style_cell_param),
        Paragraph("—", style_cell_unit),
        c_val("Sombra da Lua<br/>(José Simão, 1923)", name=True),
        c_val("Vendaval II<br/>(Maragogipe, 1947)", name=True),
        c_val("Joia Rara<br/>(M. Aristides, Ribeira)", name=True),
        c_val("Saveiro de Carga<br/>(Ricardo Teixeira)", proj=True),
    ],
    # 2. LOA
    [Paragraph("Comprimento total (LOA)", style_cell_param), Paragraph("m", style_cell_unit), c_val("12,50"), c_val("14,00"), c_val("7,00"), c_val("7,50", proj=True)],
    # 3. LWL
    [Paragraph("Comprimento na linha d'água (LWL)", style_cell_param), Paragraph("m", style_cell_unit), c_val("11,20"), c_val("12,50"), c_val("6,20"), c_val("6,40", proj=True)],
    # 4. BOA
    [Paragraph("Boca máxima (BOA)", style_cell_param), Paragraph("m", style_cell_unit), c_val("4,00"), c_val("4,60"), c_val("2,25*"), c_val("2,50", proj=True)],
    # 5. Calado
    [Paragraph("Calado (d ou Tc)", style_cell_param), Paragraph("m", style_cell_unit), c_val("0,60"), c_val("0,65"), c_val("0,38"), c_val("0,38", proj=True)],
    # 6. Pontal
    [Paragraph("Pontal (D)", style_cell_param), Paragraph("m", style_cell_unit), c_val("1,30"), c_val("1,45"), c_val("0,80"), c_val("0,76", proj=True)],
    # 7. Deslocamento
    [Paragraph("Deslocamento", style_cell_param), Paragraph("kg", style_cell_unit), c_val("11.150"), c_val("15.800"), c_val("2.230"), c_val("2.510", proj=True)],
    # 8. Potência instalada
    [Paragraph("Potência instalada", style_cell_param), Paragraph("HP", style_cell_unit), c_val("25"), c_val("30"), c_val("10"), c_val("13,5", proj=True)],
    # 9. Tanque Combustível
    [Paragraph("Tanque Combustível", style_cell_param), Paragraph("L", style_cell_unit), c_val("60"), c_val("80"), c_val("25"), c_val("25", proj=True)],
    # 10. Tanque de água doce
    [Paragraph("Tanque de água doce", style_cell_param), Paragraph("L", style_cell_unit), c_val("50"), c_val("60"), c_val("20"), c_val("20", proj=True)],
    # 11. Velocidade máxima
    [Paragraph("Velocidade máxima", style_cell_param), Paragraph("nós", style_cell_unit), c_val("8,5"), c_val("9,0"), c_val("6,5"), c_val("7,0", proj=True)],
    # 12. Velocidade de cruzeiro
    [Paragraph("Velocidade de cruzeiro", style_cell_param), Paragraph("nós", style_cell_unit), c_val("6,5"), c_val("7,0"), c_val("5,0"), c_val("6,0", proj=True)],
    
    # FAIXA 1: Razões e Coeficientes - Calcular
    [
        Paragraph("<b>Razões e Coeficientes — Calcular</b>", style_sec_head),
        "", "", "", "", ""
    ],
    # 13. LOA / BOA
    [Paragraph("LOA (L) / BOA (B)", style_cell_param), Paragraph("—", style_cell_unit), c_val("3,12"), c_val("3,04"), c_val("3,11"), c_val("3,00", proj=True)],
    # 14. Pontal / Calado
    [Paragraph("Pontal (D) / Calado (d ou Tc)", style_cell_param), Paragraph("—", style_cell_unit), c_val("2,17"), c_val("2,23"), c_val("2,11"), c_val("2,00", proj=True)],
    # 15. DLR
    [Paragraph("Razão deslocamento-comprimento (DLR)", style_cell_param), Paragraph("—", style_cell_unit), c_val("221"), c_val("225"), c_val("261"), c_val("267", proj=True)],
    # 16. SLR
    [Paragraph("Razão velocidade-comprimento (SLR)", style_cell_param), Paragraph("—", style_cell_unit), c_val("1,07"), c_val("1,09"), c_val("1,11"), c_val("1,31", proj=True)],
    # 17. Cp
    [Paragraph("Coeficiente Prismático (Cp)", style_cell_param), Paragraph("—", style_cell_unit), c_val("0,61"), c_val("0,61"), c_val("0,63"), c_val("0,65", proj=True)],
    # 18. Cm (na folha impresso como Cp)
    [Paragraph("Coeficiente Seção Mestra (Cm)", style_cell_param), Paragraph("—", style_cell_unit), c_val("0,72"), c_val("0,70"), c_val("0,70"), c_val("0,68", proj=True)],
    # 19. Deslocamento / Potência
    [Paragraph("Deslocamento / Potência", style_cell_param), Paragraph("kg/HP", style_cell_unit), c_val("446,0"), c_val("526,7"), c_val("223,0"), c_val("185,9", proj=True)],
    
    # FAIXA 2: Apenas Veleiros
    [
        Paragraph("<b>Apenas Veleiros</b>", style_sec_head),
        "", "", "", "", ""
    ],
    # 20. Área Molhada do Casco
    [
        Paragraph("Área Molhada do Casco", style_cell_param),
        Paragraph("M²", style_cell_unit),
        c_val("29,8"),
        c_val("36,8"),
        c_val("9,7"),
        c_val("10,7", proj=True),
    ],
]

table_style = TableStyle([
    ('BACKGROUND', (0,0), (-1,0), vermelho_escuro),
    ('GRID', (0,0), (-1,-1), 0.5, cinza_linhas),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 3.2),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3.2),
    ('LEFTPADDING', (0,0), (0,-1), 4),
    ('RIGHTPADDING', (0,0), (-1,-1), 2),
    
    # Linha 1: Embarcação
    ('TOPPADDING', (0,1), (-1,1), 4.5),
    ('BOTTOMPADDING', (0,1), (-1,1), 4.5),
    ('BACKGROUND', (0,1), (-1,1), colors.HexColor("#F2ECE4")),
    
    # Destacar coluna "SEU PROJETO"
    ('BACKGROUND', (5,1), (5,12), colors.HexColor("#EBF8FF")),
    ('BACKGROUND', (5,14), (5,20), colors.HexColor("#EBF8FF")),
    ('BACKGROUND', (5,22), (5,22), colors.HexColor("#EBF8FF")),
    
    # Faixa 1: Razões e Coeficientes
    ('BACKGROUND', (0,13), (-1,13), bege_secao),
    ('SPAN', (0,13), (-1,13)),
    ('TOPPADDING', (0,13), (-1,13), 2.5),
    ('BOTTOMPADDING', (0,13), (-1,13), 2.5),
    
    # Faixa 2: Apenas Veleiros
    ('BACKGROUND', (0,21), (-1,21), bege_secao),
    ('SPAN', (0,21), (-1,21)),
    ('TOPPADDING', (0,21), (-1,21), 2.5),
    ('BOTTOMPADDING', (0,21), (-1,21), 2.5),
    
    # Alternância suave
    ('BACKGROUND', (0,3), (4,3), bege_fundo),
    ('BACKGROUND', (0,5), (4,5), bege_fundo),
    ('BACKGROUND', (0,7), (4,7), bege_fundo),
    ('BACKGROUND', (0,9), (4,9), bege_fundo),
    ('BACKGROUND', (0,11), (4,11), bege_fundo),
    ('BACKGROUND', (0,15), (4,15), bege_fundo),
    ('BACKGROUND', (0,17), (4,17), bege_fundo),
    ('BACKGROUND', (0,19), (4,19), bege_fundo),
])

t_main = Table(table_data, colWidths=col_w)
t_main.setStyle(table_style)
elements.append(t_main)
elements.append(Spacer(1, 6))

# Memória de Cálculo / Notas Técnicas
elements.append(Paragraph("<b>MEMÓRIA DE CÁLCULO E FÓRMULAS UTILIZADAS (Conforme Aulas Dia 3 e Dia 13):</b>", ParagraphStyle('HNotes', fontName='Helvetica-Bold', fontSize=7, leading=9, textColor=vermelho_escuro)))
elements.append(HRFlowable(width="100%", thickness=0.8, color=vermelho_brana, spaceAfter=3, spaceBefore=1))

mem_text = (
    "• <b>LOA/BOA:</b> Comprimento total dividido pela boca máxima. Seu projeto atinge <b>3,00</b> exatos (regra do graminho de 1/3).<br/>"
    "• <b>Pontal / Calado (D/d):</b> Razão entre a altura do casco e a parte submersa (proporção típica de saveiro entre 2,0 e 2,2).<br/>"
    "• <b>DLR:</b> <i>Displacement-Length Ratio</i> = (Δ [lbs] / 2240) ÷ (LWL [ft] / 100)³. Seu projeto resulta em <b>267</b> (deslocamento pesado para carga com alta inércia).<br/>"
    "• <b>SLR (Speed-Length Ratio):</b> V [nós] ÷ √LWL [pés]. Em velocidade de cruzeiro de 6 nós (SLR = 1,31), opera rigorosamente no teto de eficiência de casco de deslocamento.<br/>"
    "• <b>Cp e Cm:</b> Coeficiente de seção mestra <i>Cm</i> ≈ 0,68 a 0,72 (fundo de bojo redondo clássico) e coeficiente prismático <i>Cp</i> ≈ 0,61 a 0,65 (bojos cheios para suporte de carga).<br/>"
    "• <b>Área Molhada (WS):</b> Calculada pela formulação clássica de Denny-Mumford: <i>WS = LWL × (1,7 × d + Cb × BWL)</i>. Seu saveiro apresenta <b>10,7 m²</b> de superfície molhada."
)
elements.append(Paragraph(mem_text, style_notes))
elements.append(Spacer(1, 6))

foot_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/>"
    "Avenida Rio Branco, 18 – 15º andar &nbsp;|&nbsp; Centro, Rio de Janeiro – RJ &nbsp;|&nbsp; (21) 3511-6551 &nbsp;|&nbsp; www.brana.com.br"
)
elements.append(Paragraph(foot_text, style_footer))

doc.build(elements)
print("PDF Estudo de Similares e Dimensões Principais gerado com sucesso!")
