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/Guia_Cavernas_e_Picadeiro_Escala_1_25.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("#D97706")
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=14,
    leading=18,
    textColor=primary_color,
    alignment=1,
    spaceAfter=3
)

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=10,
    leading=13,
    textColor=primary_color,
    spaceBefore=5,
    spaceAfter=3
)

body_style = ParagraphStyle(
    'BodyDark',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8,
    leading=11,
    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.5,
    leading=9.5,
    textColor=colors.white
)

table_body_style = ParagraphStyle(
    'TableBody',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=7.2,
    leading=9.2,
    textColor=dark_neutral
)

table_body_bold = ParagraphStyle(
    'TableBodyBold',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=7.2,
    leading=9.2,
    textColor=primary_color
)

story = []

# Cabeçalho
story.append(Paragraph("GUIA DE RISCAMENTO E MONTAGEM DO PICADEIRO (ESCALA 1:25)", title_style))
story.append(Paragraph("<b>Casco 8,50 m × 2,70 m — Gabaritos 1:25 e Estrutura do Strongback</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=5))

story.append(Paragraph("1. Regra de Conversão da Escala 1:25", section_heading))
story.append(Paragraph(
    "Na <b>Escala 1:25</b>, cada <b>1 metro real equivale a exatamente 4,0 centímetros (40,0 mm) no papel</b>:<br/>"
    "• Comprimento total do barco (8,50 m) = <b>34,0 cm</b>.<br/>"
    "• Linha d'água entre balizas (7,80 m) = <b>31,2 cm</b>.<br/>"
    "• Espaçamento entre cavernas no picadeiro (0,975 m) = <b>3,90 cm (39,0 mm)</b>.<br/>"
    "• Boca máxima (2,70 m) = <b>10,8 cm</b>.",
    body_style
))

# Tabela 1:25
t_data = [
    [Paragraph("Baliza / Posição (x)", table_header_style), Paragraph("Medida Real (m)", table_header_style), Paragraph("Largura Escala 1:25", table_header_style), Paragraph("Chine 1:25", table_header_style), Paragraph("Profundidade 1:25", table_header_style), Paragraph("Deadrise", table_header_style)],
    [Paragraph("B0 (Espelho / x=0,0m)", table_body_bold), Paragraph("2,50 m (Topo)", table_body_style), Paragraph("<b>10,00 cm</b> (±5,00 cm)", table_body_style), Paragraph("9,20 cm (±4,60 cm)", table_body_style), Paragraph("5,32 cm (53,2 mm)", table_body_style), Paragraph("17°", table_body_style)],
    [Paragraph("B1 (Praça Ré / x=0,97m)", table_body_bold), Paragraph("2,60 m (Topo)", table_body_style), Paragraph("<b>10,40 cm</b> (±5,20 cm)", table_body_style), Paragraph("9,56 cm (±4,78 cm)", table_body_style), Paragraph("5,44 cm (54,4 mm)", table_body_style), Paragraph("18°", table_body_style)],
    [Paragraph("B2 (Porão / x=1,95m)", table_body_bold), Paragraph("2,68 m (Topo)", table_body_style), Paragraph("<b>10,72 cm</b> (±5,36 cm)", table_body_style), Paragraph("9,84 cm (±4,92 cm)", table_body_style), Paragraph("5,60 cm (56,0 mm)", table_body_style), Paragraph("20°", table_body_style)],
    [Paragraph("B3 (Meia-Nau / x=2,92m)", table_body_bold), Paragraph("2,70 m (Topo)", table_body_style), Paragraph("<b>10,80 cm</b> (±5,40 cm)", table_body_style), Paragraph("9,92 cm (±4,96 cm)", table_body_style), Paragraph("5,88 cm (58,8 mm)", table_body_style), Paragraph("22°", table_body_style)],
    [Paragraph("B4 (Mestra / x=3,90m)", table_body_bold), Paragraph("2,70 m (Topo)", table_body_style), Paragraph("<b>10,80 cm</b> (±5,40 cm)", table_body_style), Paragraph("9,92 cm (±4,96 cm)", table_body_style), Paragraph("6,24 cm (62,4 mm)", table_body_style), Paragraph("25°", table_body_style)],
    [Paragraph("B5 (Comando / x=4,87m)", table_body_bold), Paragraph("2,60 m (Topo)", table_body_style), Paragraph("<b>10,40 cm</b> (±5,20 cm)", table_body_style), Paragraph("9,56 cm (±4,78 cm)", table_body_style), Paragraph("6,40 cm (64,0 mm)", table_body_style), Paragraph("30°", table_body_style)],
    [Paragraph("B6 (Cabine / x=5,85m)", table_body_bold), Paragraph("2,30 m (Topo)", table_body_style), Paragraph("<b>9,20 cm</b> (±4,60 cm)", table_body_style), Paragraph("8,44 cm (±4,22 cm)", table_body_style), Paragraph("6,52 cm (65,2 mm)", table_body_style), Paragraph("36°", table_body_style)],
    [Paragraph("B7 (Transição / x=6,82m)", table_body_bold), Paragraph("1,70 m (Topo)", table_body_style), Paragraph("<b>6,80 cm</b> (±3,40 cm)", table_body_style), Paragraph("6,24 cm (±3,12 cm)", table_body_style), Paragraph("6,64 cm (66,4 mm)", table_body_style), Paragraph("42°", table_body_style)],
    [Paragraph("B8 (Proa / x=7,80m)", table_body_bold), Paragraph("0,76 m (Topo)", table_body_style), Paragraph("<b>3,04 cm</b> (±1,52 cm)", table_body_style), Paragraph("2,80 cm (±1,40 cm)", table_body_style), Paragraph("6,48 cm (64,8 mm)", table_body_style), Paragraph("48°", table_body_style)]
]

t_table = Table(t_data, colWidths=[1.4*inch, 1.1*inch, 1.5*inch, 1.4*inch, 1.2*inch, 0.9*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))

story.append(Paragraph("2. Como Montar o Picadeiro (Strongback) na Oficina", section_heading))
story.append(Paragraph("1. <b>Nivelamento da Viga Mestra:</b> Fixar duas vigas retas e niveladas (nível de mangueira ou laser) na altura de trabalho (~80 cm do chão).", bullet_style))
story.append(Paragraph("2. <b>Marcação das Estações:</b> Marcar no picadeiro os traços das 9 balizas espaçadas exatamente a cada <b>3,90 cm (na escala 1:25)</b> ou <b>0,975 m (no picadeiro real 1:1)</b>.", bullet_style))
story.append(Paragraph("3. <b>Prumo e Esquadro:</b> Fixar cada caverna de cabeça para baixo, conferindo o prumo vertical e o alinhamento da Linha d'Água (WL = 0).", bullet_style))
story.append(Paragraph("4. <b>Encaixe da Quilha e Chines:</b> Passar a viga de quilha central e as longarinas de chine para travar todo o esqueleto antes de ripar.", bullet_style))

doc.build(story)
print("PDF Escala 1:25 gerado com sucesso!")
