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

pdf_path = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/Plano_Velico_Saveiro_6_30m.pdf"

doc = SimpleDocTemplate(
    pdf_path,
    pagesize=letter,
    rightMargin=36,
    leftMargin=36,
    topMargin=36,
    bottomMargin=36
)

styles = getSampleStyleSheet()

primary_color = colors.HexColor("#0F2B48")
secondary_color = colors.HexColor("#B45309")
dark_neutral = colors.HexColor("#1E293B")
light_neutral = colors.HexColor("#F8FAFC")
border_color = colors.HexColor("#CBD5E1")

title_style = ParagraphStyle(
    'DocTitle',
    parent=styles['Heading1'],
    fontName='Helvetica-Bold',
    fontSize=15,
    leading=19,
    textColor=primary_color,
    alignment=1,
    spaceAfter=3
)

subtitle_style = ParagraphStyle(
    'DocSubtitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9,
    leading=12,
    textColor=secondary_color,
    alignment=1,
    spaceAfter=8
)

section_heading = ParagraphStyle(
    'SectionHeading',
    parent=styles['Heading2'],
    fontName='Helvetica-Bold',
    fontSize=10.5,
    leading=13,
    textColor=primary_color,
    spaceBefore=6,
    spaceAfter=3
)

body_style = ParagraphStyle(
    'BodyDark',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8.2,
    leading=11.5,
    textColor=dark_neutral,
    spaceAfter=2
)

bullet_style = ParagraphStyle(
    'BulletDark',
    parent=body_style,
    leftIndent=10,
    firstLineIndent=-7,
    spaceAfter=2
)

table_header_style = ParagraphStyle(
    'TableHeader',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.8,
    leading=9.5,
    textColor=colors.white
)

table_body_style = ParagraphStyle(
    'TableBody',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7.5,
    leading=9.5,
    textColor=dark_neutral
)

table_body_bold = ParagraphStyle(
    'TableBodyBold',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.5,
    leading=9.5,
    textColor=primary_color
)

story = []

# Cabeçalho
story.append(Paragraph("ESPECIFICAÇÃO DO PLANO VÉLICO TRADICIONAL", title_style))
story.append(Paragraph("<b>Saveiro de uma Vela de Pena (Armação Latina Baiana) — Casco 6,30 m</b><br/><b>Aluno:</b> Alberico de Carvalho Santiago | <b>Instituição:</b> Brana / Estaleiro Escola Embrião (EEE)", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.5, color=secondary_color, spaceAfter=6))

story.append(Paragraph("1. Proporções Tradicionais da Vela de Pena", section_heading))
story.append(Paragraph(
    "A armação tradicional do Saveiro da Bahia de uma vela de pena é uma armação latina pura (sem vela de proa, portanto as cotas I e J não se aplicam). "
    "A propulsão é gerada por uma única vela triangular amurada na proa e içada por uma longa verga inclinada (a pena). "
    "Abaixo estão os cálculos para o casco de <b>6,30 m</b> no tamanho real e na <b>Escala 1:25</b>:",
    body_style
))

# Tabela
t_data = [
    [Paragraph("Elemento do Plano Vélico", table_header_style), Paragraph("Símbolo", table_header_style), Paragraph("Dimensão Real (m)", table_header_style), Paragraph("Dimensão Escala 1:25 (cm)", table_header_style), Paragraph("Função e Posicionamento", table_header_style)],
    [Paragraph("Testa da Vela (Pena / Entena)", table_body_bold), Paragraph("P", table_body_style), Paragraph("<b>7,80 m</b>", table_body_style), Paragraph("<b>31,2 cm</b>", table_body_style), Paragraph("Verga longa inclinada sustentando toda a testa da vela.", table_body_style)],
    [Paragraph("Esteira da Vela (Base)", table_body_bold), Paragraph("E", table_body_style), Paragraph("<b>5,90 m</b>", table_body_style), Paragraph("<b>23,6 cm</b>", table_body_style), Paragraph("Base livre horizontal da amura (proa) até a escota (popa).", table_body_style)],
    [Paragraph("Valuma da Vela (Borda Ré)", table_body_bold), Paragraph("V", table_body_style), Paragraph("<b>6,20 m</b>", table_body_style), Paragraph("<b>24,8 cm</b>", table_body_style), Paragraph("Borda posterior da vela entre o penol e o punho da escota.", table_body_style)],
    [Paragraph("Altura Total do Mastro", table_body_bold), Paragraph("Hm", table_body_style), Paragraph("<b>4,20 m</b>", table_body_style), Paragraph("<b>16,8 cm</b>", table_body_style), Paragraph("Mastro curto e robusto (3,40 m acima do convés).", table_body_style)],
    [Paragraph("Posição do Mastro", table_body_bold), Paragraph("Xm", table_body_style), Paragraph("<b>2,20 m da proa</b>", table_body_style), Paragraph("<b>8,8 cm da proa</b>", table_body_style), Paragraph("Aproximadamente a 35% do comprimento a partir da roda de proa.", table_body_style)],
    [Paragraph("Área Vélica Total", table_body_bold), Paragraph("Av", table_body_style), Paragraph("<b>~21,5 m²</b>", table_body_style), Paragraph("<b>344 cm²</b>", table_body_style), Paragraph("Proporção clássica para navegação ágil nas brisas da baía.", table_body_style)],
    [Paragraph("Comprimento do Casco", table_body_bold), Paragraph("LOA", table_body_style), Paragraph("<b>6,30 m</b>", table_body_style), Paragraph("<b>25,2 cm</b>", table_body_style), Paragraph("Comprimento total de proa a popa.", table_body_style)]
]

t_table = Table(t_data, colWidths=[1.6*inch, 0.6*inch, 1.2*inch, 1.4*inch, 2.7*inch])
t_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), primary_color),
    ('ALIGN', (0,0), (-1,-1), 'LEFT'),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('GRID', (0,0), (-1,-1), 0.5, border_color),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [light_neutral, colors.white]),
    ('TOPPADDING', (0,0), (-1,-1), 2.5),
    ('BOTTOMPADDING', (0,0), (-1,-1), 2.5),
]))
story.append(t_table)
story.append(Spacer(1, 4))

story.append(Paragraph("2. Notas Práticas para Confecção da Maquete (Escala 1:25)", section_heading))
story.append(Paragraph("• <b>Mastro:</b> Use uma vareta de madeira redonda (tipo palito de churrasco grosso ou cavilha de 4 a 5 mm) cortada com <b>16,8 cm</b> de comprimento.", bullet_style))
story.append(Paragraph("• <b>Pena (Verga):</b> Use uma vareta flexível mais fina (2 a 3 mm) com <b>31,2 cm</b> de comprimento.", bullet_style))
story.append(Paragraph("• <b>Vela de Pano:</b> Recorte em tecido de algodão fino ou papel manteiga/kraft um triângulo com lados de <b>31,2 cm (Pena P)</b>, <b>23,6 cm (Esteira E)</b> e <b>24,8 cm (Valuma)</b>.", bullet_style))

doc.build(story)
print("PDF Plano Velico gerado com sucesso!")
