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/Projeto_POWERCAT_8_5m_Alberico.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("#1A5F7A")
accent_color = colors.HexColor("#DDA15E")
dark_neutral = colors.HexColor("#2B2D42")
light_neutral = colors.HexColor("#F8F9FA")
border_color = colors.HexColor("#CBD5E1")

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

subtitle_style = ParagraphStyle(
    'DocSubtitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9.5,
    leading=13,
    textColor=secondary_color,
    alignment=1,
    spaceAfter=10
)

section_heading = ParagraphStyle(
    'SectionHeading',
    parent=styles['Heading2'],
    fontName='Helvetica-Bold',
    fontSize=11,
    leading=14,
    textColor=primary_color,
    spaceBefore=7,
    spaceAfter=4
)

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

bullet_style = ParagraphStyle(
    'BulletDark',
    parent=body_style,
    leftIndent=12,
    firstLineIndent=-8,
    spaceAfter=2.5
)

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

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

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

story = []

# Cabeçalho
story.append(Paragraph("PROJETO CONCEITUAL — POWERCAT BOAT 8,50 m", title_style))
story.append(Paragraph("<b>Catamarã a Motor para Pesca de Espinhel de Fundo (Talude / 400 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))

# 1. Missão
story.append(Paragraph("1. Missão e Requisitos de Projeto", section_heading))
story.append(Paragraph(
    "Embarcação multicasco tipo <b>Catamarã a Motor</b> em fibra de vidro (PRFV) com <b>8,50 m de comprimento</b> e <b>3,60 m de boca</b>, dimensionada especificamente para operação de espinhel de fundo no talude (~400 m de profundidade), com porto base em Salvador - BA, autonomia de 3 a 5 dias, tripulação de 4 pessoas e capacidade para 1.000 kg de peixe + gelo.",
    body_style
))

# 2. Dimensões Principais
story.append(Paragraph("2. Dimensões Principais e Hidrostática Preliminar", section_heading))

dim_data = [
    [Paragraph("Parâmetro", table_header_style), Paragraph("Símbolo", table_header_style), Paragraph("Valor", table_header_style), Paragraph("Significado / Justificativa Técnica", table_header_style)],
    [Paragraph("Comprimento Total", table_body_bold), Paragraph("LOA", table_body_style), Paragraph("8,50 m (27,9 ft)", table_body_style), Paragraph("Definido pelo armador. Porte ágil, econômico e de fácil atracação.", table_body_style)],
    [Paragraph("Comprimento na Linha d'Água", table_body_bold), Paragraph("LWL", table_body_style), Paragraph("8,00 m", table_body_style), Paragraph("Linha d'água longa para maximizar velocidade de casco e reduzir arrasto.", table_body_style)],
    [Paragraph("Boca Total (Largura)", table_body_bold), Paragraph("B", table_body_style), Paragraph("3,60 m", table_body_style), Paragraph("Relação B/LOA = 0,42. Altíssima estabilidade inicial e grande área de trabalho.", table_body_style)],
    [Paragraph("Boca de Cada Semi-Casco", table_body_bold), Paragraph("b", table_body_style), Paragraph("0,82 m", table_body_style), Paragraph("Relação L/b ≈ 9,8 (cascos esguios, furam a onda sem cavar caturro excessivo).", table_body_style)],
    [Paragraph("Espaçamento entre Eixos", table_body_bold), Paragraph("S", table_body_style), Paragraph("2,78 m", table_body_style), Paragraph("Distância entre centros dos cascos que garante túnel desobstruído.", table_body_style)],
    [Paragraph("Pontal Moldado", table_body_bold), Paragraph("D", table_body_style), Paragraph("1,50 m", table_body_style), Paragraph("Volume interno adequado para beliches, porões térmicos e máquinas.", table_body_style)],
    [Paragraph("Calado Carregado", table_body_bold), Paragraph("T", table_body_style), Paragraph("0,60 m", table_body_style), Paragraph("Baixo calado com excelente proteção de eixo/hélice.", table_body_style)],
    [Paragraph("Vão Livre do Túnel", table_body_bold), Paragraph("Hc", table_body_style), Paragraph("0,58 m", table_body_style), Paragraph("Clearance seguro para minimizar o impacto de ondas na ponte central.", table_body_style)],
    [Paragraph("Deslocamento Carregado", table_body_bold), Paragraph("Δ", table_body_style), Paragraph("~5,7 toneladas", table_body_style), Paragraph("Estrutura PRFV + 4 tripulantes + 1t peixe + 1,1t gelo + óleo + água.", table_body_style)]
]

t_dim = Table(dim_data, colWidths=[1.6*inch, 0.6*inch, 1.3*inch, 3.9*inch])
t_dim.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_dim)
story.append(Spacer(1, 4))

# 3. Balanço de Cargas e Porão
story.append(Paragraph("3. Porão de Pescado, Tanques e Autonomia (5 dias / 4 pessoas)", section_heading))
story.append(Paragraph("• <b>Porão de Pescado Isolado:</b> Capacidade total de <b>3,5 a 4,0 m³</b> dividida nos dois cascos (próximo ao centro de gravidade), isolado com espuma de poliuretano rígido (PUR 75–80 mm) e revestimento sanitário em PRFV.", bullet_style))
story.append(Paragraph("• <b>Capacidade de Carga Fria:</b> 1.000 kg de peixe nobre eviscerado + 1.100 kg de gelo em escama (razão ~1,1:1 a 1,2:1).", bullet_style))
story.append(Paragraph("• <b>Tanque de Combustível (Diesel):</b> <b>350 Litros</b> — fornece ~70 horas de navegação a 7,2 nós (consumo de ~4,5 a 5,0 L/h total), cobrindo ida, volta, deslocamento em faina e 30% de reserva.", bullet_style))
story.append(Paragraph("• <b>Tanque de Água Doce:</b> <b>300 Litros</b> (15 L/dia/homem para 5 dias).", bullet_style))
story.append(Spacer(1, 4))

# 4. Propulsão e Arranjo do Convés
story.append(Paragraph("4. Propulsão e Arranjo Conforme Croqui Original", section_heading))
story.append(Paragraph("• <b>Motorização Dupla:</b> 2 motores diesel marítimos de <b>25 HP a 30 HP</b> (totalizando 50 a 60 HP), um em cada popa de semi-casco. Proporciona redundância total em mar aberto e manobra no próprio eixo.", bullet_style))
story.append(Paragraph("• <b>Posto de Comando (Console):</b> Localizado à meia-nau sobre o bordo (conforme traçado no croqui do armador), garantindo ampla visão à vante e controle direto da praça de pesca.", bullet_style))
story.append(Paragraph("• <b>Praça de Trabalho de Popa:</b> Área livre superior a <b>14 m²</b> no convés traseiro, equipada com base para guincho recolhedor hidráulico de espinhel, rolete de borda e mesa de corte.", bullet_style))
story.append(Paragraph("• <b>Acomodações:</b> 4 beliches distribuídos nos cascos (2 a boreste e 2 a bombordo) + sanitário fechado e bancada de apoio na ponte central.", bullet_style))

doc.build(story)
print("PDF 8.5m gerado com sucesso!")
