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
from reportlab.lib.units import cm

pdf_path = "/home/magdalena/eee/alunos/rafael-rosa-batista/Caso_de_Uso_Saveiro_Ciclone_2.pdf"

doc = SimpleDocTemplate(
    pdf_path,
    pagesize=A4,
    leftMargin=2*cm,
    rightMargin=2*cm,
    topMargin=2*cm,
    bottomMargin=2*cm
)

styles = getSampleStyleSheet()

primary_color = colors.HexColor("#1A365D")
secondary_color = colors.HexColor("#2B6CB0")
dark_neutral = colors.HexColor("#2D3748")
table_header_bg = colors.HexColor("#EBF8FF")

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

subtitle_style = ParagraphStyle(
    'DocSubTitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=10.5,
    leading=14,
    textColor=secondary_color,
    spaceAfter=12
)

h1_style = ParagraphStyle(
    'Heading1_Custom',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=11.5,
    leading=15,
    textColor=primary_color,
    spaceBefore=9,
    spaceAfter=4
)

body_style = ParagraphStyle(
    'Body_Custom',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8.8,
    leading=12.5,
    textColor=dark_neutral,
    spaceAfter=4
)

bullet_style = ParagraphStyle(
    'Bullet_Custom',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8.8,
    leading=12.5,
    textColor=dark_neutral,
    leftIndent=12,
    spaceAfter=3
)

callout_style = ParagraphStyle(
    'Callout_Custom',
    parent=styles['Normal'],
    fontName='Helvetica-Oblique',
    fontSize=8.5,
    leading=12,
    textColor=primary_color
)

story = []

# Header
story.append(Paragraph("PROJETO NAVAL: SAVEIRO CICLONE 2", title_style))
story.append(Paragraph("<b>Declaração de Requisitos e Caso de Uso</b><br/><b>Aluno / Projetista:</b> Rafael Rosa Batista | <b>Orientação:</b> Profa. Magdalena (Brana / EEE)", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.5, color=secondary_color, spaceBefore=0, spaceAfter=8))

# 1. Missão
story.append(Paragraph("1. Missão da Embarcação e Perfil Operacional", h1_style))
story.append(Paragraph("O <b>Saveiro Ciclone 2</b> é uma embarcação de madeira tradicional adaptada para recreio, projetada especificamente para a navegação na Baía de Todos os Santos (BTS), integrando passeios familiares e atividade de pesca.", body_style))
story.append(Paragraph("• <b>Uso Principal:</b> Passeios de lazer e travessias entre Salvador e a Ilha de Mar Grande (Itaparica).", bullet_style))
story.append(Paragraph("• <b>Atividade Secundária:</b> Pesca esportiva e de lazer nas águas e parcéis da Baía de Todos os Santos.", bullet_style))
story.append(Paragraph("• <b>Lotação de Projeto:</b> 5 pessoas (confortavelmente acomodadas com mantimentos para o dia).", bullet_style))

# 2. Área de Navegação
story.append(Spacer(1, 2))
story.append(Paragraph("2. Área de Navegação e Condições Ambientais", h1_style))
story.append(Paragraph("• <b>Trajeto Crítico:</b> Salvador ↔ Mar Grande. Travessia sujeita a vento sudeste/leste fresco e marolas curtas e cavadas no canal de navegação da BTS.", bullet_style))
story.append(Paragraph("• <b>Restrições de Mar Grande:</b> Baixios de corais e bancos de areia na aproximação da praia/trapiche. O calado de 0,60 m é perfeito para encalhar com segurança ou fundear próximo à praia.", bullet_style))

# 3. Dimensões Principais
story.append(Spacer(1, 2))
story.append(Paragraph("3. Dimensões Principais e Hidrostática Preliminar", h1_style))

data_dim = [
    [Paragraph("<b>Parâmetro</b>", body_style), Paragraph("<b>Valor de Projeto</b>", body_style), Paragraph("<b>Análise Técnica / Justificativa</b>", body_style)],
    [Paragraph("Comprimento Total (LOA)", body_style), Paragraph("7,00 m (23,0 pés)", body_style), Paragraph("Excelente porte para mar de baía, ágil de manobra", body_style)],
    [Paragraph("Boca Máxima (B)", body_style), Paragraph("2,50 m", body_style), Paragraph("Razão L/B = 2,80: altíssima estabilidade de forma e conforto", body_style)],
    [Paragraph("Pontal Moldado (D)", body_style), Paragraph("1,10 m", body_style), Paragraph("Borda livre generosa contra spray e marolas da BTS", body_style)],
    [Paragraph("Calado de Projeto (T)", body_style), Paragraph("0,60 m", body_style), Paragraph("Acesso fácil a Mar Grande e coroas de areia da baía", body_style)],
    [Paragraph("Deslocamento Leve", body_style), Paragraph("~1.400 kg", body_style), Paragraph("Casco estruturado em madeira nobre e reforços", body_style)],
    [Paragraph("Deslocamento Carregado", body_style), Paragraph("~2.100 kg", body_style), Paragraph("Casco + lastro (~400kg) + motor + 5 pessoas + tralha", body_style)],
]

t_dim = Table(data_dim, colWidths=[4.2*cm, 3.8*cm, 9.0*cm])
t_dim.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), table_header_bg),
    ('GRID', (0, 0), (-1, -1), 0.5, colors.HexColor("#CBD5E0")),
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
    ('TOPPADDING', (0, 0), (-1, -1), 3),
    ('BOTTOMPADDING', (0, 0), (-1, -1), 3),
]))
story.append(t_dim)

# 4. Propulsão e Plano Vélico
story.append(Spacer(1, 2))
story.append(Paragraph("4. Propulsão e Plano Vélico Tradicional", h1_style))
story.append(Paragraph("• <b>Plano Vélico:</b> Vela de Içar / Alabarda com botaló de proa (~28 a 32 m² de área vélica total). Excelente rendimento nas rajadas de vento da BTS.", bullet_style))
story.append(Paragraph("• <b>Motorização Auxiliar:</b> Motor diesel marítimo de centro (15 a 25 HP, ex: Yanmar / Agrale) ou motor de popa rabeta longa (15 a 20 HP) para manobras portuárias e calmarias.", bullet_style))

# 5. Estrutura e Madeiras Tradicionais
story.append(Spacer(1, 2))
story.append(Paragraph("5. Materiais Construtivos (Tradição EEE)", h1_style))
story.append(Paragraph("• <b>Quilha, Roda de Proa e Cadaste:</b> Jaqueira / Massaranduba maciça de alta durabilidade.", bullet_style))
story.append(Paragraph("• <b>Cavername:</b> Curvas naturais selecionadas de Jaqueira / Pequi.", bullet_style))
story.append(Paragraph("• <b>Costados e Forro:</b> Pranchamento tradicional ou Strip-planking resinado com epóxi.", bullet_style))

# 6. Arranjo Interno
story.append(Spacer(1, 2))
story.append(Paragraph("6. Arranjo Geral e Compartimentação", h1_style))
story.append(Paragraph("• <b>Proa (Bico):</b> Pequeno convés/cabine baixa para guarda seca de velas, coletes e ancoragem.", bullet_style))
story.append(Paragraph("• <b>Meia-nau (Praça Central):</b> Bancadas laterais com capacidade para 5 tripulantes com folga.", bullet_style))
story.append(Paragraph("• <b>Popa (Cockpit):</b> Praça de pesca e governo do leme com cana ou timão.", bullet_style))

doc.build(story)
print("Saveiro Ciclone 2 PDF generated.")
