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

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

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

styles = getSampleStyleSheet()

# Custom styles
primary_color = colors.HexColor("#1A365D")   # Deep Navy
secondary_color = colors.HexColor("#2B6CB0") # Marine Blue
accent_color = colors.HexColor("#D69E2E")    # Warm Ochre
dark_neutral = colors.HexColor("#2D3748")    # Charcoal
light_neutral = colors.HexColor("#F7FAFC")   # Off-white
border_color = colors.HexColor("#E2E8F0")

title_style = ParagraphStyle(
    'DocTitle',
    parent=styles['Heading1'],
    fontName='Helvetica-Bold',
    fontSize=20,
    leading=24,
    textColor=primary_color,
    alignment=1, # Center
    spaceAfter=6
)

subtitle_style = ParagraphStyle(
    'DocSubtitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=11,
    leading=14,
    textColor=secondary_color,
    alignment=1,
    spaceAfter=15
)

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

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

bullet_style = ParagraphStyle(
    'BulletDark',
    parent=body_style,
    leftIndent=15,
    firstLineIndent=-10,
    spaceAfter=4
)

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

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

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

story = []

# Header Banner
story.append(Paragraph("MEMORIAL DESCRITIVO PRELIMINAR", title_style))
story.append(Paragraph("Projeto de Embarcação Pesqueira de Espinhel de Fundo (Talude) — 11,5 m<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=12))

# 1. Missão e Requisitos Operacionais
story.append(Paragraph("1. Missão e Requisitos Operacionais", section_heading))
story.append(Paragraph(
    "A embarcação tem como missão a pesca profissional de fundo com espinhel (<i>longline</i>) na região do <b>talude continental</b> (~400 metros de profundidade), com porto-base em <b>Salvador - BA</b>. O projeto prioriza autonomia de 5 dias em mar aberto, eficiência no consumo de combustível, robustez em mar formado, facilidade de higienização do porão e ampla área de convés para operação segura da arte de pesca.",
    body_style
))

# Tabela de Requisitos
req_data = [
    [Paragraph("Parâmetro", table_header_style), Paragraph("Especificação de Projeto", table_header_style), Paragraph("Justificativa Técnica", table_header_style)],
    [Paragraph("Arte de Pesca", table_body_bold), Paragraph("Espinhel de fundo (Longline)", table_body_style), Paragraph("Alvo em peixes nobres de talude (cherne, namorado, batata, garoupa).", table_body_style)],
    [Paragraph("Profundidade Operacional", table_body_bold), Paragraph("400 metros", table_body_style), Paragraph("Exige guincho recolhedor hidráulico e cabo/linha reforçados.", table_body_style)],
    [Paragraph("Autonomia", table_body_bold), Paragraph("5 dias de mar", table_body_style), Paragraph("Dimensionamento de combustível, água doce, gelo e víveres.", table_body_style)],
    [Paragraph("Capacidade de Pescado", table_body_bold), Paragraph("1.000 kg (1,0 tonelada)", table_body_style), Paragraph("Meta de captura limpa por viagem.", table_body_style)],
    [Paragraph("Capacidade de Gelo", table_body_bold), Paragraph("1.300 a 1.500 kg", table_body_style), Paragraph("Razão 1,3:1 a 1,5:1 (gelo:pescado) para clima tropical.", table_body_style)],
    [Paragraph("Material Construtivo", table_body_bold), Paragraph("Fibra de Vidro (PRFV)", table_body_style), Paragraph("Alta durabilidade, baixa manutenção e fácil isolamento térmico.", table_body_style)],
    [Paragraph("Porto Base / Desembarque", table_body_bold), Paragraph("Salvador / BTS - Bahia", table_body_style), Paragraph("Navegação em Mar Aberto / Costeira até o talude.", table_body_style)]
]

t_req = Table(req_data, colWidths=[1.5*inch, 2.3*inch, 3.2*inch])
t_req.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), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
story.append(t_req)
story.append(Spacer(1, 10))

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

dim_data = [
    [Paragraph("Grandeza", table_header_style), Paragraph("Símbolo", table_header_style), Paragraph("Valor Estimado", table_header_style), Paragraph("Observações / Função", table_header_style)],
    [Paragraph("Comprimento Total (LOA)", table_body_bold), Paragraph("LOA", table_body_style), Paragraph("11,50 m (37,7 ft)", table_body_style), Paragraph("Excelente compromisso entre maritimidade e custo.", table_body_style)],
    [Paragraph("Comprimento na Linha d'Água", table_body_bold), Paragraph("LWL", table_body_style), Paragraph("10,40 m", table_body_style), Paragraph("Determina a velocidade de deslocamento de casco (~7,5 a 8,0 nós).", table_body_style)],
    [Paragraph("Boca Moldada (Largura)", table_body_bold), Paragraph("B", table_body_style), Paragraph("3,80 m", table_body_style), Paragraph("Garante estabilidade inicial (GM) e praça de trabalho espaçosa.", table_body_style)],
    [Paragraph("Pontal Moldado (Altura)", table_body_bold), Paragraph("D", table_body_style), Paragraph("1,90 m", table_body_style), Paragraph("Francobordo seguro para mar aberto e volume de porão.", table_body_style)],
    [Paragraph("Calado de Projeto", table_body_bold), Paragraph("T", table_body_style), Paragraph("1,15 m", table_body_style), Paragraph("Permite abrigo em portos rasos com bom calado para hélice.", table_body_style)],
    [Paragraph("Deslocamento Carregado", table_body_bold), Paragraph("Δ (Delta)", table_body_style), Paragraph("~9,5 a 11,0 ton", table_body_style), Paragraph("Peso leve + tripulação + 2,5t porão + óleo + água.", table_body_style)]
]

t_dim = Table(dim_data, colWidths=[1.8*inch, 0.8*inch, 1.4*inch, 3.0*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), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
story.append(t_dim)
story.append(Spacer(1, 10))

# 3. Dimensionamento do Porão e Equipamentos
story.append(Paragraph("3. Porão de Pescado e Equipamentos de Convés", section_heading))
story.append(Paragraph("• <b>Volume do Porão Isolado:</b> 4,5 m³ a 5,0 m³ com isolamento em poliuretano expandido (PUR de alta densidade 75–100 mm) e revestimento sanitário liso em PRFV com gelcoat isoftálico atóxico.", bullet_style))
story.append(Paragraph("• <b>Divisões Internas (Balanas):</b> Pranchas removíveis para separação por espécies e contenção da carga com superfície livre de gelo/água.", bullet_style))
story.append(Paragraph("• <b>Guincho Recolhedor de Espinhel:</b> Guincho hidráulico com carretel/tambor ou pratos de fricção acionado por tomada de força (PTO) no motor principal.", bullet_style))
story.append(Paragraph("• <b>Praça de Pesca (Popa):</b> Borda livre ergonômica (~0,85 m), rolete de borda para lançamento/recolhimento e mesa de evisceração com água salgada pressurizada.", bullet_style))
story.append(Spacer(1, 6))

# 4. Propulsão e Capacidades de Tanques
story.append(Paragraph("4. Propulsão, Autonomia e Tanques", section_heading))
story.append(Paragraph("• <b>Motor Principal:</b> Diesel Marítimo de Centro (heavy duty) de <b>100 a 140 HP</b> a 2.200–2.600 rpm, acoplado a reversor redutor (razão ~2,5:1 a 3:1) e eixo protegido por skeg.", bullet_style))
story.append(Paragraph("• <b>Consumo Estimado:</b> ~10 a 14 L/h em velocidade de cruzeiro (~7,5 nós); ~3 a 5 L/h durante a faina de espinhel em marcha lenta.", bullet_style))
story.append(Paragraph("• <b>Tanque de Diesel:</b> <b>700 a 800 Litros</b> (garante ida/volta ao talude + 5 dias de faina + 25% de margem de segurança de navegação).", bullet_style))
story.append(Paragraph("• <b>Tanque de Água Doce:</b> <b>350 a 400 Litros</b> (dimensionado para 3 a 4 tripulantes por 5 dias).", bullet_style))
story.append(Spacer(1, 10))

# 5. Próximos Passos
story.append(Paragraph("5. Próximos Passos do Projeto", section_heading))
story.append(Paragraph("1. Definição detalhada do layout interno da cabine (camas/beliches, cozinha, sanitário e posto de comando).", bullet_style))
story.append(Paragraph("2. Geração do Plano de Linhas e curvas hidrostáticas do casco.", bullet_style))
story.append(Paragraph("3. Verificação da estabilidade intacta conforme os critérios da NORMAM para embarcações de pesca.", bullet_style))

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