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

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

styles = getSampleStyleSheet()

primary_color = colors.HexColor("#0F2B48")
secondary_color = colors.HexColor("#2563EB")
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=15,
    leading=19,
    textColor=primary_color,
    alignment=1,
    spaceAfter=3
)

subtitle_style = ParagraphStyle(
    'DocSubtitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9,
    leading=12,
    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("TABELA DE COTAS E GABARITOS DAS CAVERNAS — CASCO EM V", title_style))
story.append(Paragraph("<b>Monocasco em V Moderno (Deep-V / Modified-V) — 8,50 m × 2,70 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. Metodologia
story.append(Paragraph("1. Características das Cavernas do Casco em V", section_heading))
story.append(Paragraph(
    "O casco em V moderno utiliza o conceito de <b>Deadrise Progressivo com Arestas Vivas (Hard Chine)</b>. "
    "A entrada de proa possui um V profundo (48°) para cortar mar picado, suavizando para 17° a 18° na popa para gerar sustentação hidrodinâmica e planeio. "
    "Abaixo estão as coordenadas exatas para marcação e corte nas chapas de compensado naval de 15 mm:",
    body_style
))

# 2. Tabela de Balizas
t_data = [
    [Paragraph("Baliza / Posição (x)", table_header_style), Paragraph("Largura Topo (Total)", table_header_style), Paragraph("Largura Chine (Aresta)", table_header_style), Paragraph("Altura do Chine", table_header_style), Paragraph("Fundo Quilha", table_header_style), Paragraph("Ângulo Deadrise", table_header_style)],
    [Paragraph("B0 (Espelho / x=0,0m)", table_body_bold), Paragraph("2,50 m (±1,25m)", table_body_style), Paragraph("2,30 m (±1,15m)", table_body_style), Paragraph("-0,32 m da WL", table_body_style), Paragraph("-0,48 m da WL", table_body_style), Paragraph("17° (Popa)", table_body_style)],
    [Paragraph("B1 (Praça Ré / x=0,97m)", table_body_bold), Paragraph("2,60 m (±1,30m)", table_body_style), Paragraph("2,39 m (±1,20m)", table_body_style), Paragraph("-0,32 m da WL", table_body_style), Paragraph("-0,50 m da WL", table_body_style), Paragraph("18°", table_body_style)],
    [Paragraph("B2 (Porão / x=1,95m)", table_body_bold), Paragraph("2,68 m (±1,34m)", table_body_style), Paragraph("2,46 m (±1,23m)", table_body_style), Paragraph("-0,32 m da WL", table_body_style), Paragraph("-0,52 m da WL", table_body_style), Paragraph("20°", table_body_style)],
    [Paragraph("B3 (Meia-Nau / x=2,92m)", table_body_bold), Paragraph("2,70 m (±1,35m)", table_body_style), Paragraph("2,48 m (±1,24m)", table_body_style), Paragraph("-0,33 m da WL", table_body_style), Paragraph("-0,55 m da WL", table_body_style), Paragraph("22°", table_body_style)],
    [Paragraph("B4 (Mestra / x=3,90m)", table_body_bold), Paragraph("2,70 m (±1,35m)", table_body_style), Paragraph("2,48 m (±1,24m)", table_body_style), Paragraph("-0,33 m da WL", table_body_style), Paragraph("-0,58 m da WL", table_body_style), Paragraph("25° (Mestra)", table_body_style)],
    [Paragraph("B5 (Comando / x=4,87m)", table_body_bold), Paragraph("2,60 m (±1,30m)", table_body_style), Paragraph("2,39 m (±1,20m)", table_body_style), Paragraph("-0,27 m da WL", table_body_style), Paragraph("-0,55 m da WL", table_body_style), Paragraph("30°", table_body_style)],
    [Paragraph("B6 (Cabine / x=5,85m)", table_body_bold), Paragraph("2,30 m (±1,15m)", table_body_style), Paragraph("2,11 m (±1,06m)", table_body_style), Paragraph("-0,16 m da WL", table_body_style), Paragraph("-0,48 m da WL", table_body_style), Paragraph("36°", table_body_style)],
    [Paragraph("B7 (Transição / x=6,82m)", table_body_bold), Paragraph("1,70 m (±0,85m)", table_body_style), Paragraph("1,56 m (±0,78m)", table_body_style), Paragraph("0,00 m (na WL)", table_body_style), Paragraph("-0,38 m da WL", table_body_style), Paragraph("42° (V Profundo)", table_body_style)],
    [Paragraph("B8 (Proa / x=7,80m)", table_body_bold), Paragraph("0,76 m (±0,38m)", table_body_style), Paragraph("0,70 m (±0,35m)", table_body_style), Paragraph("+0,23 m da WL", table_body_style), Paragraph("-0,22 m da WL", table_body_style), Paragraph("48° (Entrada)", table_body_style)]
]

t_table = Table(t_data, colWidths=[1.5*inch, 1.2*inch, 1.3*inch, 1.1*inch, 1.1*inch, 1.0*inch])
t_table.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),
    ('BOTTOMPADDING', (0,0), (-1,-1), 2),
]))
story.append(t_table)
story.append(Spacer(1, 4))

# 3. Entalhes
story.append(Paragraph("2. Entalhes Estruturais no Picadeiro", section_heading))
story.append(Paragraph("• <b>Quilha Central:</b> Entalhe central no ponto mais baixo de 8 cm de largura × 8 cm de altura.", bullet_style))
story.append(Paragraph("• <b>Longarinas do Chine:</b> Entalhes de 4 cm × 4 cm nos cantos da aresta viva para travamento perfeito da forma antes do chapeamento/laminação.", bullet_style))

doc.build(story)
print("PDF Cavernas Casco em V gerado com sucesso!")
