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

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

styles = getSampleStyleSheet()

# Custom styles
primary_color = colors.HexColor("#1A365D")
secondary_color = colors.HexColor("#2B6CB0")
dark_neutral = colors.HexColor("#2D3748")
light_bg = colors.HexColor("#F7FAFC")
border_color = colors.HexColor("#CBD5E0")

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

subtitle_style = ParagraphStyle(
    'DocSubTitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=10,
    leading=14,
    textColor=dark_neutral,
    alignment=1,
    spaceAfter=12
)

section_style = ParagraphStyle(
    'SectionHeader',
    parent=styles['Heading2'],
    fontName='Helvetica-Bold',
    fontSize=12,
    leading=16,
    textColor=primary_color,
    spaceBefore=8,
    spaceAfter=4
)

body_style = ParagraphStyle(
    'BodyDark',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9.5,
    leading=13.5,
    textColor=dark_neutral
)

bullet_style = ParagraphStyle(
    'BulletText',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9,
    leading=13,
    textColor=dark_neutral
)

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

table_cell_style = ParagraphStyle(
    'TableCell',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8.5,
    leading=11.5,
    textColor=dark_neutral
)

table_cell_bold = ParagraphStyle(
    'TableCellBold',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=8.5,
    leading=11.5,
    textColor=primary_color
)

elements = []

# Header Box
header_data = [
    [Paragraph("<b>CURSO DE DESIGN PROFISSIONAL DE EMBARCAÇÕES</b><br/>BRANA & ESTALEIRO ESCOLA EMBRIÃO (EEE)", ParagraphStyle('H1', fontName='Helvetica-Bold', fontSize=10, textColor=colors.white, alignment=1))],
    [Paragraph("DOCUMENTO DE REQUISITOS DE PROJETO (CASO DE USO)", ParagraphStyle('H2', fontName='Helvetica-Bold', fontSize=13, textColor=colors.white, alignment=1))]
]
header_table = Table(header_data, colWidths=[515])
header_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), primary_color),
    ('ALIGN', (0,0), (-1,-1), 'CENTER'),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('TOPPADDING', (0,0), (-1,-1), 6),
]))
elements.append(header_table)
elements.append(Spacer(1, 10))

# Metadata Table
meta_data = [
    [Paragraph("<b>Projeto:</b> Saveiro Tradicional de Carga (7,20 m)", body_style), Paragraph("<b>Data:</b> 15/09/2026", body_style)],
    [Paragraph("<b>Projetista / Aluno:</b> Ricardo Teixeira", body_style), Paragraph("<b>Área de Navegação:</b> Área 2 (NORMAM)", body_style)]
]
meta_table = Table(meta_data, colWidths=[315, 200])
meta_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), light_bg),
    ('BOX', (0,0), (-1,-1), 1, border_color),
    ('INNERGRID', (0,0), (-1,-1), 0.5, border_color),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
    ('RIGHTPADDING', (0,0), (-1,-1), 8),
]))
elements.append(meta_table)
elements.append(Spacer(1, 10))

# 1. Perfil de Usuários
elements.append(Paragraph("1. Perfil de Usuários e Tripulação", section_style))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=6, spaceBefore=2))
elements.append(Paragraph("• <b>Lotação de Projeto:</b> 2 tripulantes adultos.", bullet_style))
elements.append(Paragraph("• <b>Qualificação e Experiência:</b> Tripulação com sólida experiência na condução de embarcações, manobras à vela, operação de motores auxiliares e navegação em águas costeiras/interiores.", bullet_style))
elements.append(Spacer(1, 6))

# 2. Área de Operação e Guarda
elements.append(Paragraph("2. Área de Operação e Regime de Guarda", section_style))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=6, spaceBefore=2))
elements.append(Paragraph("• <b>Área de Navegação:</b> <b>Área 2</b> (Interior 2 — Baía de Todos-os-Santos, águas parcialmente abrigadas com incidência de vento e mar picado).", bullet_style))
elements.append(Paragraph("• <b>Fundeio e Guarda na Água:</b> Fundeado em poita na água durante períodos de uso habitual.", bullet_style))
elements.append(Paragraph("• <b>Operação em Praia:</b> Encalhado e puxado na areia da praia, prevendo movimentação sobre roletes de madeira e proteção estrutural de quilha/sobrequilha de sacrifício contra atrito.", bullet_style))
elements.append(Paragraph("• <b>Transporte Rodoviário:</b> Compatível com reboque rodoviário ocasional (capacidade de tração até 3.500 kg; peso total estimado do conjunto barco + carreta em ~1.100 kg).", bullet_style))
elements.append(Spacer(1, 6))

# 3. Missão Principal e Capacidade de Carga
elements.append(Paragraph("3. Missão Principal e Capacidade de Carga", section_style))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=6, spaceBefore=2))
elements.append(Paragraph("• <b>Finalidade:</b> Embarcação utilitária de transporte de cargas, volumes e mantimentos.", bullet_style))
elements.append(Paragraph("• <b>Capacidade de Carga Útil Líquida:</b> <b>1.500 kg (1,5 tonelada)</b> de mercadorias a meio-navio.", bullet_style))
elements.append(Paragraph("• <b>Requisitos de Arranjo:</b> Praça de carga central ampla e desimpedida, garantindo estiva segura e preservando as linhas de passagem e governo.", bullet_style))
elements.append(Spacer(1, 6))

# 4. Regime Operacional e Propulsão
elements.append(Paragraph("4. Regime Operacional e Sistema Propulsivo", section_style))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=6, spaceBefore=2))
elements.append(Paragraph("• <b>Autonomia:</b> Saídas contínuas de <b>48 horas</b>, com previsão de abrigo em toldo de retranca para pernoite a bordo ou na praia, água potável (20L) e rancho.", bullet_style))
elements.append(Paragraph("• <b>Sistema Propulsivo Híbrido Triplo:</b>", bullet_style))
elements.append(Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;1. <i>Vela (Principal):</i> Armação tradicional de saveiro (içar ou carangueja) com área vélica entre 18 e 22 m².<br/>&nbsp;&nbsp;&nbsp;&nbsp;2. <i>Motor Auxiliar:</i> Motor de popa ou centro de 8 a 15 hp instalado no painel de popa reforçado.<br/>&nbsp;&nbsp;&nbsp;&nbsp;3. <i>Remo (Apoio):</i> Bancadas e toleteiras reforçadas para manobra fina, atracação e calmaria.", bullet_style))
elements.append(Spacer(1, 6))

# 5. Materiais e Construção
elements.append(Paragraph("5. Materiais e Método Construtivo", section_style))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=6, spaceBefore=2))
elements.append(Paragraph("• <b>Material:</b> Madeira nativa maciça da floresta (construção naval tradicional de saveiro).", bullet_style))
elements.append(Paragraph("• <b>Estrutura:</b> Esqueleto estrutural em madeira nobre (quilha corrida, roda de proa, cadaste e cavernas maciças) com tabuado em tingladura (<i>lapstrake/clinker</i>) ou carvela calafetada.", bullet_style))
elements.append(Spacer(1, 6))

# 6. Tabela de Dimensões Principais
elements.append(Paragraph("6. Dimensões Principais de Projeto e Estimativa Hidrostática", section_style))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=6, spaceBefore=2))

dim_data = [
    [Paragraph("<b>Parâmetro Naval</b>", table_header_style), Paragraph("<b>Símbolo</b>", table_header_style), Paragraph("<b>Valor de Projeto</b>", table_header_style), Paragraph("<b>Significado Prático</b>", table_header_style)],
    [Paragraph("Comprimento Total", table_cell_bold), Paragraph("LOA", table_cell_style), Paragraph("7,20 m", table_cell_style), Paragraph("Comprimento total de proa a popa", table_cell_style)],
    [Paragraph("Comprimento na Linha d'Água", table_cell_bold), Paragraph("LWL", table_cell_style), Paragraph("6,60 m", table_cell_style), Paragraph("Comprimento imerso em regime de carga", table_cell_style)],
    [Paragraph("Boca Máxima", table_cell_bold), Paragraph("B", table_cell_style), Paragraph("2,30 m", table_cell_style), Paragraph("Largura máxima, confere alta estabilidade", table_cell_style)],
    [Paragraph("Pontal a Meio-Navio", table_cell_bold), Paragraph("D", table_cell_style), Paragraph("1,00 m", table_cell_style), Paragraph("Altura do fundo do casco até a borda", table_cell_style)],
    [Paragraph("Calado Carregado", table_cell_bold), Paragraph("T", table_cell_style), Paragraph("0,38 m", table_cell_style), Paragraph("Apenas 38 cm de água com 1.500 kg de carga", table_cell_style)],
    [Paragraph("Borda Livre Carregado", table_cell_bold), Paragraph("F", table_cell_style), Paragraph("0,62 m", table_cell_style), Paragraph("Excelente reserva de flutuabilidade na Área 2", table_cell_style)],
    [Paragraph("Deslocamento Plena Carga", table_cell_bold), Paragraph("Δ", table_cell_style), Paragraph("~2.480 kg", table_cell_style), Paragraph("Peso total na água (casco + tripulação + 1,5t carga)", table_cell_style)],
]

dim_table = Table(dim_data, colWidths=[140, 50, 85, 240])
dim_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), primary_color),
    ('GRID', (0,0), (-1,-1), 0.5, border_color),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, light_bg]),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('RIGHTPADDING', (0,0), (-1,-1), 5),
]))
elements.append(dim_table)
elements.append(Spacer(1, 10))

# Footer note
elements.append(Paragraph("<i>Documento técnico emitido para o Curso de Design Profissional de Embarcações - Brana / EEE.</i>", ParagraphStyle('Foot', fontName='Helvetica-Oblique', fontSize=8, textColor=colors.gray, alignment=1)))

doc.build(elements)
print("PDF gerado com sucesso!")
