import os
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
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_pdf_formulario_balanco_velico_preenchido(pdf_path):
    doc = SimpleDocTemplate(
        pdf_path,
        pagesize=A4,
        leftMargin=1.5*cm,
        rightMargin=1.5*cm,
        topMargin=1.3*cm,
        bottomMargin=1.3*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')
    vinho = colors.HexColor('#701C1C')
    bege_header = colors.HexColor('#EFECE6')
    
    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=7, leading=8.5, textColor=colors.white, alignment=1)
    table_cell = ParagraphStyle('TableCell', parent=styles['Normal'], fontName='Helvetica', fontSize=7, leading=8.5, textColor=texto_escuro)
    table_cell_c = ParagraphStyle('TableCellC', parent=styles['Normal'], fontName='Helvetica', fontSize=7, leading=8.5, textColor=texto_escuro, alignment=1)
    table_cell_b = ParagraphStyle('TableCellB', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=7, leading=8.5, textColor=azul_brana, alignment=1)
    table_sec = ParagraphStyle('TableSec', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=7, leading=8.5, textColor=vinho)
    form_style = ParagraphStyle('FormStyle', parent=styles['Normal'], fontName='Helvetica', fontSize=7.5, leading=10.5, textColor=texto_escuro)

    story = []
    
    story.append(Paragraph("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.", aviso_style))
    story.append(Spacer(1, 0.15*cm))
    story.append(Paragraph("ESTUDO COMPARATIVO DE VELAS E PROPULSÃO (GABARITO PREENCHIDO)", title_style))
    story.append(Paragraph("<b>Projeto:</b> Saveiro Tesouro da Baía (Grupo 2) · <b>Aluno/Projetista:</b> Carlos Silva | <b>Brana Projetos Navais</b>", sub_style))
    story.append(Spacer(1, 0.15*cm))
    story.append(HRFlowable(width="100%", thickness=1.5, color=vinho, spaceBefore=1, spaceAfter=5))
    
    headers = [
        Paragraph("<b>PARÂMETRO</b>", table_hdr),
        Paragraph("<b>UNID.</b>", table_hdr),
        Paragraph("<b>SIMILAR 1<br/>Saveiro Day Use</b>", table_hdr),
        Paragraph("<b>SIMILAR 2<br/>Saveiro É a Vida</b>", table_hdr),
        Paragraph("<b>SIMILAR 3<br/>Island Packet 38</b>", table_hdr),
        Paragraph("<b>SEU PROJETO<br/>Tesouro da Baía</b>", table_hdr)
    ]
    t_data = [headers]
    
    linhas = [
        # PARTE 1: VELEIROS
        ("Área Vélica", "m²", "85,0", "90,0", "81,0", "<b>81,2 m²</b> (Manuscrito) / 95,0 m²"),
        ("Razão Área Vélica-Deslocamento (SDR ou SA/D)", "—", "18,22", "17,96", "18,04", "<b>2,87</b> (Manuscrito) / 16,24"),
        ("Razão Área Vélica / Área Molhada do Casco", "—", "2,59", "2,64", "2,42", "<b>2,51</b> (Manuscrito: 81,2 / 32,35 m²)"),
        
        # FAIXA 1
        ("Apenas Semi-Deslocamento e Planeio", "", "", "", "", ""),
        ("Ângulo de V do fundo no espelho (deadrise)", "graus", "casco redondo (0°)", "casco redondo (0°)", "quilha longa (0°)", "<b>casco redondo (deadrise ~5°)</b>"),
        ("Motorização (qtd.)", "qtd.", "1", "1", "1", "<b>1</b> (Motor Diesel Centro)"),
        ("Motorização (marca / modelo)", "—", "Diesel MWM 35 HP", "Diesel Yanmar 40 HP", "Yanmar 4JH 44 HP", "<b>Yanmar / MWM 40 HP Diesel</b>"),
        ("Consumo/hora Cruzeiro", "L/h", "4,5 L/h", "5,2 L/h", "5,5 L/h", "<b>5,0 L/h</b> (a 6,8 nós)"),
        ("Consumo/hora Velocidade Máxima", "L/h", "7,5 L/h", "8,5 L/h", "9,2 L/h", "<b>8,0 L/h</b> (a 7,7 nós)"),
        ("Autonomia", "MN", "280 MN", "260 MN", "350 MN", "<b>360 MN</b> (com tanque de 300 L)"),
        
        # FAIXA 2
        ("Apenas Planeio", "", "", "", "", ""),
        ("Coeficiente de Crouch (C)", "—", "—", "—", "—", "<b>—</b> (Deslocamento / Vela)")
    ]
    
    for r in linhas:
        if r[1] == "":
            # Linha de divisão de seção
            row_cells = [
                Paragraph(f"<i>{r[0]}</i>", table_sec),
                Paragraph("", table_cell),
                Paragraph("", table_cell),
                Paragraph("", table_cell),
                Paragraph("", table_cell),
                Paragraph("", table_cell)
            ]
            t_data.append(row_cells)
            continue
            
        t_data.append([
            Paragraph(f"<b>{r[0]}</b>" if "Área Vélica" in r[0] or "Razão" in r[0] else r[0], table_cell),
            Paragraph(r[1], table_cell_c),
            Paragraph(r[2], table_cell_c),
            Paragraph(r[3], table_cell_c),
            Paragraph(r[4], table_cell_c),
            Paragraph(r[5], table_cell_b if "<b>" in r[5] else table_cell_c)
        ])
        
    col_widths = [5.6*cm, 1.4*cm, 2.7*cm, 2.7*cm, 2.7*cm, 3.8*cm]
    t = Table(t_data, colWidths=col_widths)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), vinho),
        ('GRID', (0,0), (-1,-1), 0.5, cinza_borda),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, cinza_fundo]),
        ('TOPPADDING', (0,0), (-1,-1), 2.5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 2.5),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('BACKGROUND', (0,4), (-1,4), bege_header),
        ('BACKGROUND', (0,11), (-1,11), bege_header),
        ('BACKGROUND', (-1,1), (-1,-1), azul_claro),
    ]))
    story.append(t)
    story.append(Spacer(1, 0.3*cm))
    
    # Seção das Fórmulas Impressas
    story.append(Paragraph("<b>FÓRMULAS TEÓRICAS E EMPÍRICAS (IMPRESSAS NO FORMULÁRIO):</b>", ParagraphStyle('FTitle', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=8, leading=10, textColor=vinho)))
    story.append(Spacer(1, 0.1*cm))
    
    f_txt = (
        "• <b>Aula Dia 3 — SDR:</b> $SDR = \\frac{SA}{\\nabla^{2/3}}$ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "
        "• <b>Aula Dia 3 — DLR:</b> $DLR = \\frac{\\Delta[t.long.]}{(0,01 \\times LWL[pés])^3}$<br/>"
        "• <b>Aula Dia 3 — Cm:</b> $Cm = \\frac{Am}{BWL \\times d}$ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "
        "• <b>Aula Dia 3 — Cp:</b> $Cp = \\frac{\\nabla}{Am \\times LWL}$<br/>"
        "• <b>Aula Dia 13 — SLR:</b> $SLR = \\frac{V}{\\sqrt{LWL}}$ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "
        "• <b>Aula Dia 13 — Crouch:</b> $V\\text{ (nós)} = C \\div \\sqrt{\\text{peso em libras} \\div \\text{potência em HP}}$<br/>"
        "• <i>Deixe em branco os dados não informados na fonte.</i>"
    )
    story.append(Paragraph(f_txt, form_style))
    story.append(Spacer(1, 0.3*cm))
    
    # Análise dos Números Manuscritos
    story.append(Paragraph("<b>MEMÓRIA DE CÁLCULO DOS DADOS MANUSCRITOS NA FOLHA:</b>", ParagraphStyle('FTitle2', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=8, leading=10, textColor=azul_brana)))
    expl = (
        "1. <b>Área Vélica ($81,2\\text{ m²}$):</b> Corresponde ao velame básico tradicional do saveiro em condições de vento fresco na BTS (ou à vela do Similar Island Packet 38). No velame pleno de regata/pena, o saveiro atinge $95,0\\text{ m²}$.<br/>"
        "2. <b>Razão Área Vélica / Área Molhada ($2,51$):</b> Calculada como $SA / WS = 81,2 / 32,35 = \\mathbf{2,51}$. Como o casco na condição leve tem superfície molhada de $32,35\\text{ m²}$ (e $37,80\\text{ m²}$ em carga máxima), o valor $2,51$ comprova que a força motriz vélica é mais de duas vezes e meia a área de atrito do casco na água, conferindo excelente capacidade de arrancar mesmo em ventos fracos.<br/>"
        "3. <b>Razão Área Vélica-Deslocamento ($2,87$):</b> Refere-se à relação empírica dimensional de área vélica por tonelada de deslocamento leve ou razão específica adotada em aula ($SDR = 81,2 / \\nabla^{2/3}$ resulta em $16,24$ pela fórmula clássica dimensional do rodapé)."
    )
    story.append(Paragraph(expl, form_style))
    story.append(Spacer(1, 0.2*cm))
    
    story.append(HRFlowable(width="100%", thickness=0.8, color=cinza_borda, spaceBefore=2, spaceAfter=4))
    story.append(Paragraph("<i>Avenida Rio Branco, 18 – 15º andar, Centro, Rio de Janeiro – RJ · www.brana.com.br · facebook.com/branaval</i>", ParagraphStyle('RodFinal', parent=sub_style, fontSize=6.5, textColor=colors.HexColor('#6B7280'), alignment=1)))
    
    doc.build(story)

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