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_Arranjo_Geral_Lancha_Cabinada_8_5m.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.6,
    leading=10.2,
    textColor=dark_neutral,
    spaceAfter=2
)

bullet_style = ParagraphStyle(
    'BulletDark',
    parent=body_style,
    leftIndent=8,
    firstLineIndent=-6,
    spaceAfter=1.5
)

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("PROJETO EXECUTIVO DE ARRANJO GERAL (GENERAL ARRANGEMENT PLAN)", title_style))
story.append(Paragraph("<b>Embarcação Cabinada a Motor / Trawler / Lobster Boat — 8,50 m × 2,90 m (28 pés)</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. Conceito do Arranjo Geral (Idêntico à Imagem de Referência)", section_heading))
story.append(Paragraph(
    "A planta baixa técnica reproduz fielmente a arquitetura da imagem enviada pelo aluno: uma <b>embarcação cabinada a motor tipo Pilothouse Cruiser / Lobster Boat</b> "
    "de <b>8,50 m de comprimento (28 pés) por 2,90 m de boca</b>. "
    "Sua marca registrada é a perfeita integração entre a <b>ampla praça de popa aberta revestida em teca (cockpit de pesca e lazer)</b> e a <b>cabine principal fechada por porta corrediça</b>, "
    "oferecendo posto de comando interno protegido com visão 360°, cozinha completa, dinete em U, banheiro fechado e suíte de proa privativa:",
    body_style
))

# 2. Tabela de Compartimentos
table_data = [
    [
        Paragraph("Compartimento", table_header_style),
        Paragraph("Localização / Bordo", table_header_style),
        Paragraph("Dimensão Longitudinal", table_header_style),
        Paragraph("Mobiliário e Equipamentos Instalados", table_header_style),
        Paragraph("Função Náutica e Conforto a Bordo", table_header_style)
    ],
    [
        Paragraph("1. Plataforma e Praça de Popa<br/>(Cockpit em Teca)", table_body_bold),
        Paragraph("Popa Externa<br/>(Ar Livre)", table_body_style),
        Paragraph("<b>2,60 metros</b><br/>(x = 0,00 a 2,60 m)", table_body_style),
        Paragraph("Piso ripado em teca antiderrapante, banco de popa estofado, plataforma de banho com escada, alçapão estanque de inspeção do motor diesel e paióis de pesca.", table_body_left),
        Paragraph("Praça de trabalho desimpedida para pesca de espinhel, mergulho e convivência externa ao ar livre.", table_body_left)
    ],
    [
        Paragraph("2. Salão / Dinete de Refeições<br/>(Main Saloon)", table_body_bold),
        Paragraph("Salão Interno<br/>(Bombordo)", table_body_style),
        Paragraph("<b>2,50 metros</b><br/>(x = 2,70 a 5,20 m)", table_body_style),
        Paragraph("Sofá em 'U' estofado com mesa de jantar central em madeira nobre rebatível (converte-se facilmente em cama de casal extra de 1,90 m × 1,20 m).", table_body_left),
        Paragraph("Convivência climatizada/arejada para 5 a 6 pessoas sentadas durante as refeições e navegação.", table_body_left)
    ],
    [
        Paragraph("3. Cozinha Linear<br/>(Galley)", table_body_bold),
        Paragraph("Salão Interno<br/>(Boreste Ré)", table_body_style),
        Paragraph("<b>1,30 metro</b><br/>(x = 2,70 a 4,00 m)", table_body_style),
        Paragraph("Bancada com cuba redonda de inox, torneira pressurizada, cooktop náutico de 2 bocas a gás e geladeira náutica de 65 L sob a bancada.", table_body_left),
        Paragraph("Preparo de alimentos prático sem isolar o cozinheiro do convívio no salão.", table_body_left)
    ],
    [
        Paragraph("4. Posto de Comando Interno<br/>(Helm Station)", table_body_bold),
        Paragraph("Salão Interno<br/>(Boreste Vante)", table_body_style),
        Paragraph("<b>1,40 metro</b><br/>(x = 4,00 a 5,40 m)", table_body_style),
        Paragraph("Console ergonômico com painel de instrumentos, display multifunção GPS/Sonda, volante/timão náutico, manete do motor e cadeira giratória do piloto.", table_body_left),
        Paragraph("Pilotagem totalmente abrigada do vento, chuva e respingos com ampla visibilidade pelo para-brisa frontal.", table_body_left)
    ],
    [
        Paragraph("5. Banheiro Fechado<br/>(Head / WC)", table_body_bold),
        Paragraph("Nível Inferior<br/>(Bombordo)", table_body_style),
        Paragraph("<b>1,10 metro</b><br/>(x = 5,40 a 6,50 m)", table_body_style),
        Paragraph("Vaso sanitário marítimo elétrico/manual, lavatório de canto com pia e ducha sanitária com ralo no piso.", table_body_left),
        Paragraph("Privacidade total em compartimento impermeabilizado com antepara de madeira e porta de acesso.", table_body_left)
    ],
    [
        Paragraph("6. Cabine de Casal de Proa<br/>(Master Cabin / V-Berth)", table_body_bold),
        Paragraph("Extremo de Vante<br/>(Proa)", table_body_style),
        Paragraph("<b>2,00 metros</b><br/>(x = 6,50 a 8,50 m)", table_body_style),
        Paragraph("Cama de casal triangular em 'V' (2,00 m × 1,60 m) com colchão naval de 12 cm, gavetões sob o estrado, escotilha de teto (*hatch*) e paiol de amarras frontal.", table_body_left),
        Paragraph("Camarote privativo de pernoite com ventilação natural e isolamento acústico.", table_body_left)
    ]
]

t_comp = Table(
    table_data,
    colWidths=[1.6*inch, 1.3*inch, 1.4*inch, 3.6*inch, 2.8*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 Construtiva e Funcional
story.append(Paragraph("2. Vantagens desse Arranjo para Navegação na Bahia e Mar Aberto", section_heading))
story.append(Paragraph(
    "• <b>Transição Direta Cockpit-Salão:</b> A porta de correr no mesmo nível une a praça de popa ao salão, criando um espaço integrado contínuo de mais de <b>5,40 metros</b>, perfeito para o clima tropical da Bahia.<br/>"
    "• <b>Proteção Absoluta do Piloto:</b> Ao contrário de barcos abertos, o piloto comanda a embarcação em uma poltrona confortável dentro da cabine fechada, ideal para travessias até o talude ou dias de chuva e mar picado.<br/>"
    "• <b>Capacidade de Pernoite (4 a 5 Pessoas):</b> 2 pessoas na cama de casal de proa + 2 pessoas na dinete convertida em cama de casal + 1 pessoa nos sofás, garantindo autonomia completa de cruzeiro de fim de semana.",
    body_style
))

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