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/Planta_Arranjo_Geral_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=6
)

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=10,
    firstLineIndent=-7,
    spaceAfter=2
)

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

table_body_style = ParagraphStyle(
    'TableBody',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=6.8,
    leading=8.5,
    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.8,
    leading=8.5,
    textColor=primary_color,
    alignment=1
)

story = []

# Cabeçalho
story.append(Paragraph("MEMORIAL DESCRITIVO DE ARRANJO GERAL INTERNO (GENERAL ARRANGEMENT)", title_style))
story.append(Paragraph("<b>Embarcação Cabinada de Cruzeiro / Passeio — 8,50 m × 2,85 m</b> | Aluno: Alberico | Brana / EEE", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.2, color=secondary_color, spaceAfter=4))

# Descrição dos Compartimentos
story.append(Paragraph("1. Distribuição dos Compartimentos e Habitabilidade", section_heading))
story.append(Paragraph(
    "A planta baixa de arranjo geral reproduz a distribuição clássica de habitabilidade compacta da imagem enviada pelo aluno, "
    "otimizada para uma embarcação de <b>8,50 m de comprimento por 2,85 m de boca</b>, garantindo pernoite confortável para 4 a 5 pessoas, "
    "banheiro fechado privativo, cozinha linear completa e amplo cockpit de popa:",
    body_style
))

# Tabela de Compartimentos
table_data = [
    [
        Paragraph("Compartimento", table_header_style),
        Paragraph("Localização", table_header_style),
        Paragraph("Dimensão Longitudinal", table_header_style),
        Paragraph("Mobiliário e Equipamentos Instalados", table_header_style),
        Paragraph("Capacidade / Função a Bordo", table_header_style)
    ],
    [
        Paragraph("1. Cabine de Proa<br/>(V-Berth)", table_body_bold),
        Paragraph("Extremo de Vante<br/>(Proa)", table_body_style),
        Paragraph("<b>2,70 metros</b><br/>(x = 5,80 a 8,50 m)", table_body_style),
        Paragraph("Cama de casal triangular em 'V' com estofamento de 10 cm, paiol de amarras sob o bico e armários laterais.", table_body_left),
        Paragraph("Pernoite confortável para 2 adultos com escotilha zenital de ventilação.", table_body_left)
    ],
    [
        Paragraph("2. Banheiro Fechado<br/>(Head / WC)", table_body_bold),
        Paragraph("Meia-Nau<br/>(Boreste)", table_body_style),
        Paragraph("<b>1,40 metro</b><br/>(x = 4,40 a 5,80 m)", table_body_style),
        Paragraph("Vaso sanitário marítimo manual/elétrico, lavatório com pia em inox, torneira retrátil com chuveiro e ralo de fundo.", table_body_left),
        Paragraph("Privacidade total fechada por porta de madeira e antepara estanque.", table_body_left)
    ],
    [
        Paragraph("3. Cozinha Linear<br/>(Galley)", table_body_bold),
        Paragraph("Meia-Nau<br/>(Bombordo)", table_body_style),
        Paragraph("<b>1,50 metro</b><br/>(x = 4,30 a 5,80 m)", table_body_style),
        Paragraph("Bancada com cuba de inox, torneira pressurizada, fogão náutico cardan de 2 bocas a gás e geladeira/caixa de gelo de 60 L.", table_body_left),
        Paragraph("Preparo de refeições a bordo durante cruzeiros e passeios de vários dias.", table_body_left)
    ],
    [
        Paragraph("4. Salão / Dinete<br/>(Saloon)", table_body_bold),
        Paragraph("Centro da Cabine<br/>(Meia-Nau a Ré)", table_body_style),
        Paragraph("<b>2,00 metros</b><br/>(x = 2,40 a 4,40 m)", table_body_style),
        Paragraph("Mesa de refeições central rebatível (vira cama adicional) com sofá longitudinal a boreste e sofá a bombordo.", table_body_left),
        Paragraph("Convivência para 4 a 6 pessoas sentadas; leito extra para 1 a 2 tripulantes.", table_body_left)
    ],
    [
        Paragraph("5. Cockpit Externo<br/>(Poço de Popa)", table_body_bold),
        Paragraph("Praça de Popa<br/>(Ar Livre)", table_body_style),
        Paragraph("<b>2,40 metros</b><br/>(x = 0,00 a 2,40 m)", table_body_style),
        Paragraph("Bancos ergonômicos laterais com paióis sob os assentos, roda de leme / timão central, escada de acesso e caixa de motor sob o piso.", table_body_left),
        Paragraph("Governo da embarcação, manobras de ancoragem e área de lazer ao ar livre.", table_body_left)
    ]
]

t_comp = Table(
    table_data,
    colWidths=[1.5*inch, 1.3*inch, 1.5*inch, 3.5*inch, 2.7*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))

story.append(Paragraph("2. Notas Construtivas de Anteparas e Ergonomia", section_heading))
story.append(Paragraph(
    "• <b>Pé-Direito Interno:</b> A casaria garante pé-direito livre de <b>1,85 m no salão central e cozinha</b>, reduzindo suavemente para 1,55 m na cabine de proa.<br/>"
    "• <b>Anteparas Estruturais (Bulkheads):</b> Três anteparas principais de compensado naval de 15 a 18 mm laminadas ao casco estruturam a embarcação: em x = 5,80 m (cabine de proa), x = 4,40 m (banheiro) e x = 2,40 m (fechamento da cabine/cockpit).<br/>"
    "• <b>Posicionamento de Peso (Centro de Gravidade):</b> Os tanques de água doce (150 L) e combustível (100 L) situam-se sob os sofás do salão central, mantendo o centro de gravidade próximo ao centro de carena e preservando o caimento nivelado do barco.",
    body_style
))

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