import os
from reportlab.lib.pagesizes import letter, landscape
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_Similar_Perfil_Multichine28.pdf"

doc = SimpleDocTemplate(
    pdf_path,
    pagesize=landscape(letter),
    rightMargin=30,
    leftMargin=30,
    topMargin=26,
    bottomMargin=26
)

styles = getSampleStyleSheet()

primary_color = colors.HexColor("#0F2B48")
secondary_color = colors.HexColor("#B45309")
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=13,
    leading=17,
    textColor=primary_color,
    alignment=1,
    spaceAfter=2
)

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

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

body_style = ParagraphStyle(
    'BodyDark',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7.5,
    leading=10,
    textColor=dark_neutral,
    spaceAfter=2
)

table_header_style = ParagraphStyle(
    'TableHeader',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=6.8,
    leading=8.5,
    textColor=colors.white,
    alignment=1
)

table_body_style = ParagraphStyle(
    'TableBody',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.5,
    leading=8.2,
    textColor=dark_neutral,
    alignment=1
)

table_body_left = ParagraphStyle(
    'TableBodyLeft',
    parent=table_body_style,
    alignment=0
)

table_body_bold = ParagraphStyle(
    'TableBodyBold',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=6.5,
    leading=8.2,
    textColor=primary_color,
    alignment=1
)

story = []

# Cabeçalho
story.append(Paragraph("ESTUDO COMPARATIVO DE PERFIL DE VELEIROS DE CRUZEIRO (B&G YACHT DESIGN)", title_style))
story.append(Paragraph("<b>Confronto de Silhuetas e Hidrodinâmica: Pop 25 (7,54 m) vs. Multichine 28 (9,20 m)</b> | Aluno: Alberico | Brana / EEE", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.2, color=secondary_color, spaceAfter=4))

# 1. Introdução
story.append(Paragraph("1. O 'Irmão Maior' Oceânico: Multichine 28", section_heading))
story.append(Paragraph(
    "Para complementar o perfil do <b>Pop 25</b> (veleiro amarelo da sua imagem de referência), o similar direto mais consagrado da mesma linhagem é o <b>MULTICHINE 28</b>, "
    "também desenhado por <b>Roberto Barros (Cabinho)</b>. "
    "Enquanto o Pop 25 é um projeto moderno e compacto de linhas chineadas e proa quase vertical para águas costeiras e baías, o Multichine 28 é um autêntico <i>blue water cruiser</i> "
    "de 30 pés (9,20 m) com dezenas de unidades construídas em compensado/epóxi que já completaram voltas ao mundo. "
    "Abaixo confrontamos as características dos dois perfis:",
    body_style
))

# 2. Tabela de Comparação
table_data = [
    [
        Paragraph("Parâmetro de Perfil", table_header_style),
        Paragraph("Pop 25 (25 pés)<br/>[Modelo da sua Foto]", table_header_style),
        Paragraph("Multichine 28 (30 pés)<br/>[Similar Oceânico de Cruzeiro]", table_header_style),
        Paragraph("Diferenças Náuticas e Comportamento Estrutural", table_header_style)
    ],
    [
        Paragraph("Comprimento Total (LOA)", table_body_bold),
        Paragraph("<b>7,54 metros</b> (24' 8\")", table_body_style),
        Paragraph("<b>9,20 metros</b> (30' 2\")", table_body_style),
        Paragraph("O MC 28 é 1,66 m mais longo, proporcionando maior capacidade de carga e conforto para travessias oceânicas.", table_body_left)
    ],
    [
        Paragraph("Linha d'Água (LWL)", table_body_bold),
        Paragraph("<b>7,25 metros</b> (96% do LOA)", table_body_style),
        Paragraph("<b>7,82 metros</b> (85% do LOA)", table_body_style),
        Paragraph("O Pop 25 tem proa vertical moderna (máxima LWL para o tamanho); o MC 28 tem proa lançada tradicional que sobe suave na onda.", table_body_left)
    ],
    [
        Paragraph("Boca Máxima (B)", table_body_bold),
        Paragraph("<b>2,80 metros</b>", table_body_style),
        Paragraph("<b>3,18 metros</b>", table_body_style),
        Paragraph("Ambos têm popas largas (estilo triangular moderno), garantindo estabilidade estática e excelente espaço no cockpit.", table_body_left)
    ],
    [
        Paragraph("Calado e Quilha", table_body_bold),
        Paragraph("<b>1,10 metro</b> (Bulbo de 560 kg)", table_body_style),
        Paragraph("<b>1,52 metro</b> (Bulbo de 1.200 kg)", table_body_style),
        Paragraph("O Pop 25 tem calado reduzido para fundeios em praias; o MC 28 tem quilha profunda para máximo poder contravento no oceano.", table_body_left)
    ],
    [
        Paragraph("Tipo de Leme", table_body_bold),
        Paragraph("Leme externo no espelho de popa", table_body_style),
        Paragraph("Leme externo c/ plataforma de popa", table_body_style),
        Paragraph("Ambos usam o confiável leme externo de popa de Cabinho: simplicidade construtiva, sem bucha de passagem de casco vulnerável.", table_body_left)
    ],
    [
        Paragraph("Perfil da Casaria", table_body_bold),
        Paragraph("Casaria baixa integrada (*semi-flush*)", table_body_style),
        Paragraph("Casaria em degrau clássica (*coachroof*)", table_body_style),
        Paragraph("O Pop 25 tem uma única vigia azul corrida; o MC 28 possui vigias ovais e área plana no convés para estibagem do bote de apoio.", table_body_left)
    ],
    [
        Paragraph("Armação e Mastro", table_body_bold),
        Paragraph("Sloop fracionado sem estai de popa", table_body_style),
        Paragraph("Masthead Sloop c/ estai de popa", table_body_style),
        Paragraph("O mastro do MC 28 (11,2 m) tem tope e estai de popa estrutural para aguentar ventos de tempestade com enrolador de genoa.", table_body_left)
    ],
    [
        Paragraph("Motorização Auxiliar", table_body_bold),
        Paragraph("Elétrico 4,5 kW ou Diesel 10–14 CV", table_body_style),
        Paragraph("Diesel de Centro 21 a 29 HP (Yanmar)", table_body_style),
        Paragraph("O Pop 25 foi pioneiro no motor elétrico regenerativo; o MC 28 usa motor diesel clássico com tanque integrado de 120 L.", table_body_left)
    ]
]

t_comp = Table(
    table_data,
    colWidths=[1.8*inch, 2.0*inch, 2.2*inch, 4.2*inch]
)

t_comp.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), primary_color),
    ('ALIGN', (0,0), (-1,-1), 'CENTER'),
    ('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_comp)
story.append(Spacer(1, 4))

# 3. Análise Conclusiva
story.append(Paragraph("2. Conclusão da Comparação de Perfis", section_heading))
story.append(Paragraph(
    "• <b>Para Day-Sailing e Cruzeiro de Fim de Semana (Baía de Todos-os-Santos):</b> O perfil do <b>Pop 25 (7,54 m)</b> é imbatível. Calado de 1,10 m, leme sem estai de popa atrapalhando o cockpit e linhas muito fáceis de chapear em compensado e fibra.<br/>"
    "• <b>Para Cruzeiro de Longo Curso / Volta ao Mundo:</b> O perfil do <b>Multichine 28 (9,20 m)</b> é a grande referência brasileira. Sua proa mais lançada não embica nas vagas do oceano, a plataforma de popa facilita o banho de mar e o mastro de tope garante solidez absoluta sob qualquer temporal.",
    body_style
))

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