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_Construcao_Forma_Fibra_Lobster_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("#059669")
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("GUIA CONSTRUTIVO DO MOLDE PARA FIBRA DE VIDRO (PRFV)", title_style))
story.append(Paragraph("<b>Construção do Modelo Macho / Forma do Casco Lobster Boat 8,50 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 do Molde
story.append(Paragraph("1. Processo Construtivo da Forma (Molde Macho Descartável / One-off)", section_heading))
story.append(Paragraph(
    "Para laminar um casco único em fibra de vidro com acabamento de alto nível, o método mais rápido e econômico é o <b>molde macho ripado (plug)</b>:<br/>"
    "1. Cortam-se as <b>9 cavernas/balizas (B0 a B8)</b> em compensado naval de 15 mm e montam-se invertidas sobre o picadeiro nivelado.<br/>"
    "2. Ripa-se o esqueleto com ripas finas de madeira leve ou tiras de MDF/PVC (espessura 6 a 10 mm).<br/>"
    "3. Aplica-se massa plástica/epóxi, lixa-se até obter superfície espelhada e aplica-se cera desmoldante + álcool polivinílico (PVA).<br/>"
    "4. Lamina-se o casco definitivo com <b>Gelcoat Isoftálico</b>, mantas e tecidos biaxiais de fibra de vidro.",
    body_style
))

# 2. Tabela de Balizas
story.append(Paragraph("2. Tabela de Dimensões das Cavernas do Molde", section_heading))

t_data = [
    [Paragraph("Caverna / Molde", table_header_style), Paragraph("Posição (x)", table_header_style), Paragraph("Boca Total Molde", table_header_style), Paragraph("Semi-Boca WL (0,0m)", table_header_style), Paragraph("Profundidade Fundo", table_header_style), Paragraph("Altura do Convés", table_header_style)],
    [Paragraph("Molde B0 (Popa)", table_body_bold), Paragraph("0,00 m", table_body_style), Paragraph("2,40 m (±1,20m)", table_body_style), Paragraph("1,14 m", table_body_style), Paragraph("-0,65 m", table_body_style), Paragraph("+0,75 m", table_body_style)],
    [Paragraph("Molde B1 (Ré)", table_body_bold), Paragraph("0,97 m", table_body_style), Paragraph("2,64 m (±1,32m)", table_body_style), Paragraph("1,26 m", table_body_style), Paragraph("-0,72 m", table_body_style), Paragraph("+0,76 m", table_body_style)],
    [Paragraph("Molde B2 (Porão)", table_body_bold), Paragraph("1,95 m", table_body_style), Paragraph("2,84 m (±1,42m)", table_body_style), Paragraph("1,36 m", table_body_style), Paragraph("-0,75 m", table_body_style), Paragraph("+0,78 m", table_body_style)],
    [Paragraph("Molde B3 (Meia-Nau)", table_body_bold), Paragraph("2,92 m", table_body_style), Paragraph("2,90 m (±1,45m)", table_body_style), Paragraph("1,39 m", table_body_style), Paragraph("-0,75 m", table_body_style), Paragraph("+0,82 m", table_body_style)],
    [Paragraph("Molde B4 (Mestra)", table_body_bold), Paragraph("3,90 m", table_body_style), Paragraph("2,90 m (±1,45m)", table_body_style), Paragraph("1,38 m", table_body_style), Paragraph("-0,73 m", table_body_style), Paragraph("+0,88 m", table_body_style)],
    [Paragraph("Molde B5 (Vante)", table_body_bold), Paragraph("4,87 m", table_body_style), Paragraph("2,80 m (±1,40m)", table_body_style), Paragraph("1,31 m", table_body_style), Paragraph("-0,68 m", table_body_style), Paragraph("+0,96 m", table_body_style)],
    [Paragraph("Molde B6 (Cabine)", table_body_bold), Paragraph("5,85 m", table_body_style), Paragraph("2,50 m (±1,25m)", table_body_style), Paragraph("1,12 m", table_body_style), Paragraph("-0,58 m", table_body_style), Paragraph("+1,08 m", table_body_style)],
    [Paragraph("Molde B7 (Transição)", table_body_bold), Paragraph("6,82 m", table_body_style), Paragraph("1,80 m (±0,90m)", table_body_style), Paragraph("0,76 m", table_body_style), Paragraph("-0,45 m", table_body_style), Paragraph("+1,22 m", table_body_style)],
    [Paragraph("Molde B8 (Roda Proa)", table_body_bold), Paragraph("7,80 m", table_body_style), Paragraph("0,70 m (±0,35m)", table_body_style), Paragraph("0,28 m", table_body_style), Paragraph("-0,25 m", table_body_style), Paragraph("+1,35 m", table_body_style)]
]

t_table = Table(t_data, colWidths=[1.4*inch, 0.9*inch, 1.4*inch, 1.3*inch, 1.3*inch, 1.1*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. Laminação do Casco
story.append(Paragraph("3. Esquema de Laminação do Casco sobre a Forma", section_heading))
story.append(Paragraph("• <b>Camada 1 (Superfície):</b> Gelcoat Naval Isoftálico com proteção UV e barreira anti-osmose (espessura 0,6 a 0,8 mm).", bullet_style))
story.append(Paragraph("• <b>Camada 2 (Barreira Química):</b> 1x Manta de Fibra de Vidro 300 g/m² com resina éster-vinílica.", bullet_style))
story.append(Paragraph("• <b>Camada 3 (Estrutural Costado):</b> 2x Mantas 450 g/m² + 2x Tecidos Biaxiais 600 g/m² com resina isoftálica (espessura final ~8 mm).", bullet_style))
story.append(Paragraph("• <b>Camada 4 (Reforço de Quilha e Fundo):</b> Camada adicional maciça de 3x Tecidos Biaxiais 800 g/m² + Roving unidirecional ao longo de todo o skeg (espessura final 14 a 16 mm na quilha).", bullet_style))

doc.build(story)
print("PDF Guia Forma Fibra gerado com sucesso!")
