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

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

styles = getSampleStyleSheet()

primary_color = colors.HexColor("#0F2B48")   # Azul Marinho Profundo
secondary_color = colors.HexColor("#B45309") # Tom Bronze / Madeira
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=16,
    leading=20,
    textColor=primary_color,
    alignment=1,
    spaceAfter=3
)

subtitle_style = ParagraphStyle(
    'DocSubtitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9.5,
    leading=13,
    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=3
)

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("CASO DE USO E PERFIL OPERACIONAL", title_style))
story.append(Paragraph("<b>Embarcação Pesqueira Estilo 'Lobster Boat' — 8,50 m × 3,60 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. Declaração de Missão
story.append(Paragraph("1. O que é um 'Lobster Boat' de Pesca?", section_heading))
story.append(Paragraph(
    "O estilo <b>Lobster Boat</b> (barco clássico de pesca de lagosta e espinhel) é uma das arquiteturas de trabalho mais eficientes e consagradas do mundo. Suas marcas registradas são: <b>proa alta e lançada com cabine abrigada na vante</b> (para cortar mar bravo e proteger a tripulação), <b>posto de comando à meia-nau com visão direta da água</b> e uma <b>enorme praça de popa baixa e aberta</b> com borda ergonômica para puxar linhas, armadilhas (covos) e manusear o pescado com total segurança.",
    body_style
))

# 2. Tabela do Caso de Uso
story.append(Paragraph("2. Resumo Executivo do Caso de Uso", section_heading))

case_data = [
    [Paragraph("Item / Requisito", table_header_style), Paragraph("Definição de Projeto", table_header_style), Paragraph("Função na Pescaria / Operação", table_header_style)],
    [Paragraph("Atividade Principal", table_body_bold), Paragraph("Pesca de Espinhel e Covos/Armadilhas", table_body_style), Paragraph("Talude continental (~400 m de profundidade) para peixes nobres e crustáceos.", table_body_style)],
    [Paragraph("Área de Navegação", table_body_bold), Paragraph("Mar Aberto / Costeira (Salvador - BA)", table_body_style), Paragraph("Saída da Baía de Todos-os-Santos até 20–40 milhas náuticas fora da costa.", table_body_style)],
    [Paragraph("Duração da Faina", table_body_bold), Paragraph("3 a 5 dias contínuos no mar", table_body_style), Paragraph("Dimensionamento de água, combustível, gelo e descanso para 4 pescadores.", table_body_style)],
    [Paragraph("Tripulação", table_body_bold), Paragraph("4 pessoas (Mestre + 3 Pescadores)", table_body_style), Paragraph("Revezamento em turnos de vigia, lançamento, recolhimento e evisceração.", table_body_style)],
    [Paragraph("Capacidade de Carga", table_body_bold), Paragraph("1.000 kg de peixe + 1.100 kg de gelo", table_body_style), Paragraph("Porão térmico isolado (PUR 80 mm) com assepsia sanitária em fibra.", table_body_style)],
    [Paragraph("Dimensões Principais", table_body_bold), Paragraph("LOA: 8,50 m | Boca: 3,60 m | Calado: 0,60 m", table_body_style), Paragraph("Grande estabilidade de plataforma para puxar carga pesada no bordo.", table_body_style)],
    [Paragraph("Propulsão", table_body_bold), Paragraph("50 a 60 HP (2x 25 HP / 2x 30 HP)", table_body_style), Paragraph("Deslocamento ultra-econômico (~4,5 a 5,0 L/h) com redundância de 2 motores.", table_body_style)]
]

t_case = Table(case_data, colWidths=[1.5*inch, 2.3*inch, 3.4*inch])
t_case.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_case)
story.append(Spacer(1, 4))

# 3. Rotina Operacional (Ciclo de Pesca de 5 Dias)
story.append(Paragraph("3. Ciclo Operacional de uma Pescaria Típica (Passo a Passo)", section_heading))
story.append(Paragraph("• <b>Dia 1 (Saída e Deslocamento):</b> Embarque da tripulação (4 pessoas), carregamento de 1.100 kg de gelo em escama, mantimentos, 350 L de diesel e 300 L de água doce. Navegação de 3 a 5 horas a 7,5 nós até o talude (~400 m).", bullet_style))
story.append(Paragraph("• <b>Dias 2 a 4 (Faina de Pesca no Talude):</b> Lançamento do espinhel / armadilhas na madrugada/manhã. Recolhimento com o guincho hidráulico de bordo, evisceração na mesa de popa e estocagem imediata em caixas térmicas com gelo no porão. Turnos de descanso de 2 pescadores nos beliches de vante.", bullet_style))
story.append(Paragraph("• <b>Dia 5 (Retorno e Descarga):</b> Recolhimento final da arte de pesca, limpeza da praça de trabalho com água pressurizada e retorno para Salvador para desembarque de até 1.000 kg de peixe fresco refrigerado.", bullet_style))
story.append(Spacer(1, 4))

# 4. Exigências Específicas do Projeto
story.append(Paragraph("4. Requisitos de Projeto Decorrentes do Caso de Uso", section_heading))
story.append(Paragraph("1. <b>Ergonomia de Trabalho na Borda:</b> Altura de amurada na praça de ré entre 0,75 m e 0,85 m para permitir que o pescador manuseie a linha sem forçar a coluna e com proteção contra queda.", bullet_style))
story.append(Paragraph("2. <b>Estabilidade Transversal Estricta:</b> Altíssimo momento restaurador (GM) para não adernar quando a tripulação concentrar peso e tração no mesmo bordo ao recolher o espinhel.", bullet_style))
story.append(Paragraph("3. <b>Proteção da Cabine:</b> Posto de comando semifechado na vante protegendo contra chuva e borrifos de mar aberto, mantendo ampla visão da praça de trabalho na ré.", bullet_style))

doc.build(story)
print("PDF Caso de Uso Lobster gerado com sucesso!")
