import os
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether
from reportlab.lib.units import cm

pdf_path = "/home/magdalena/eee/alunos/rafael-rosa-batista/Projeto_Conceitual_Bote_5m_Rio_Barra.pdf"

doc = SimpleDocTemplate(
    pdf_path,
    pagesize=A4,
    leftMargin=2*cm,
    rightMargin=2*cm,
    topMargin=2*cm,
    bottomMargin=2*cm
)

styles = getSampleStyleSheet()

# Custom styles
primary_color = colors.HexColor("#1A365D")
secondary_color = colors.HexColor("#2B6CB0")
accent_color = colors.HexColor("#2C5282")
dark_neutral = colors.HexColor("#2D3748")
light_bg = colors.HexColor("#F7FAFC")
table_header_bg = colors.HexColor("#EBF8FF")

title_style = ParagraphStyle(
    'DocTitle',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=20,
    leading=24,
    textColor=primary_color,
    spaceAfter=4
)

subtitle_style = ParagraphStyle(
    'DocSubTitle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=11,
    leading=14,
    textColor=secondary_color,
    spaceAfter=15
)

h1_style = ParagraphStyle(
    'Heading1_Custom',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=13,
    leading=17,
    textColor=primary_color,
    spaceBefore=12,
    spaceAfter=6
)

body_style = ParagraphStyle(
    'Body_Custom',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9.5,
    leading=13.5,
    textColor=dark_neutral,
    spaceAfter=6
)

bullet_style = ParagraphStyle(
    'Bullet_Custom',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9.5,
    leading=13.5,
    textColor=dark_neutral,
    leftIndent=15,
    spaceAfter=4
)

callout_style = ParagraphStyle(
    'Callout_Custom',
    parent=styles['Normal'],
    fontName='Helvetica-Oblique',
    fontSize=9,
    leading=13,
    textColor=primary_color
)

story = []

# Title & Header
story.append(Paragraph("PROJETO CONCEITUAL: BOTE MULTIUSO 5,0 M", title_style))
story.append(Paragraph("Embarcação de Lazer em Madeira para Navegação em Rio e Barra (Estuário)<br/><b>Aluno:</b> Rafael Rosa Batista | <b>Orientação:</b> Profa. Magdalena (Mada) - Brana / EEE", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.5, color=secondary_color, spaceBefore=0, spaceAfter=12))

# 1. Resumo da Concepção e Missão
story.append(Paragraph("1. Missão e Requisitos de Projeto", h1_style))
story.append(Paragraph("O projeto destina-se ao uso de lazer em águas abrigadas de rios com capacidade de cruzar barras e áreas estuarinas com ondas curtas e correntes desencontradas.", body_style))
story.append(Paragraph("• <b>Lotação:</b> 4 pessoas (capacidade para até 5 em águas calmas)", bullet_style))
story.append(Paragraph("• <b>Área de Operação:</b> Rios, lagoas e encontro do rio com o mar (ondas curtas e bancos de areia)", bullet_style))
story.append(Paragraph("• <b>Método Construtivo Principal:</b> Compensado naval com resina epóxi (<i>Stitch-and-Glue</i>)", bullet_style))
story.append(Paragraph("• <b>Uso de Madeira Maciça Tradicional:</b> Jaqueira para elementos estruturais nobres", bullet_style))

# 2. Especificações Principais (Tabela)
story.append(Spacer(1, 4))
story.append(Paragraph("2. Dimensões Principais e Estimativa de Pesos", h1_style))

data_dim = [
    [Paragraph("<b>Parâmetro</b>", body_style), Paragraph("<b>Valor / Especificação</b>", body_style), Paragraph("<b>Comentário / Função Técnica</b>", body_style)],
    [Paragraph("Comprimento Total (LOA)", body_style), Paragraph("5,00 m (16,4 pés)", body_style), Paragraph("Porte ágil e fácil de manobrar em correnteza", body_style)],
    [Paragraph("Boca Máxima (B)", body_style), Paragraph("1,95 m", body_style), Paragraph("Excelente estabilidade inicial para 4 pessoas", body_style)],
    [Paragraph("Pontal Moldado (D)", body_style), Paragraph("0,85 m", body_style), Paragraph("Borda livre segura contra marolas e spray", body_style)],
    [Paragraph("Calado de Projeto (T)", body_style), Paragraph("0,25 m a 0,28 m", body_style), Paragraph("Permite passar em baixios e bancos de areia", body_style)],
    [Paragraph("Ângulo de V (Deadrise)", body_style), Paragraph("28° na proa / 13° na popa", body_style), Paragraph("Corta a onda na entrada e plana estável na popa", body_style)],
    [Paragraph("Peso do Casco Estruturado", body_style), Paragraph("~260 kg a 290 kg", body_style), Paragraph("Compensado naval + epóxi + fibra de vidro", body_style)],
    [Paragraph("Deslocamento Total Operacional", body_style), Paragraph("~750 kg a 800 kg", body_style), Paragraph("Casco + motor + tanque + 4 tripulantes", body_style)],
    [Paragraph("Motorização Recomendada", body_style), Paragraph("30 HP a 50 HP (Popa)", body_style), Paragraph("Planeio rápido e torque para passar a barra", body_style)],
]

t_dim = Table(data_dim, colWidths=[4.2*cm, 3.8*cm, 9.0*cm])
t_dim.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), table_header_bg),
    ('GRID', (0, 0), (-1, -1), 0.5, colors.HexColor("#CBD5E0")),
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
    ('TOPPADDING', (0, 0), (-1, -1), 4),
    ('BOTTOMPADDING', (0, 0), (-1, -1), 4),
]))
story.append(t_dim)

# 3. Uso da Madeira de Jaqueira
story.append(Spacer(1, 4))
story.append(Paragraph("3. Aplicação da Madeira de Jaqueira (<i>Artocarpus heterophyllus</i>)", h1_style))
story.append(Paragraph("<b>Sim, a madeira de jaqueira pode e deve ser utilizada no projeto!</b> Ela é uma madeira consagrada na carpintaria naval tradicional da Bahia (muito usada em saveiros e canoas).", body_style))
story.append(Paragraph("• <b>Características Técnicas:</b> Madeira de média/alta densidade (~650 a 750 kg/m³), excelente durabilidade natural, alta resistência a fungos e umidade, grã média e excelente acabamento.", bullet_style))
story.append(Paragraph("• <b>Onde aplicar no barco de 5m:</b>", bullet_style))
story.append(Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;- <b>Roda de proa e cadaste:</b> Peças curvas sólidas e maciças onde a proa corta a água.", bullet_style))
story.append(Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;- <b>Verdugo / Borda falsa (Gunwale):</b> Proteção externa contra atrito em trapiches e pedras.", bullet_style))
story.append(Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;- <b>Quilha de sacrifício / Patim externo:</b> Proteção do fundo ao encalhar na areia.", bullet_style))
story.append(Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;- <b>Reforço do espelho de popa (travessas):</b> Distribuição da força do motor de popa.", bullet_style))
story.append(Paragraph("• <b>Cuidados com a Jaqueira:</b> A madeira precisa estar bem seca/curada para evitar empenamento e garantir que a resina epóxi ancore perfeitamente nas colagens.", bullet_style))

# 4. Arranjo Interno e Segurança
story.append(Spacer(1, 4))
story.append(Paragraph("4. Arranjo Interno Básico e Compartimentação", h1_style))
story.append(Paragraph("• <b>Paiol de Proa (0,60 m):</b> Pequeno convés fechado na ponta para âncora, cabo e câmara de flutuabilidade estanque.", bullet_style))
story.append(Paragraph("• <b>Banco Dianteiro Transversal:</b> Acomoda 2 passageiros, com espaço inferior para guarda de coletes salva-vidas.", bullet_style))
story.append(Paragraph("• <b>Praça Central Livre:</b> Área aberta com piso antiderrapante para circulação, bagagens e caixa térmica.", bullet_style))
story.append(Paragraph("• <b>Banco de Popa / Comando:</b> Posição do piloto e do 4º passageiro, com fácil alcance ao manche do motor.", bullet_style))
story.append(Paragraph("• <b>Caixa Técnica de Popa:</b> Alojamento isolado e ventilado para tanque de 25L, bateria e dreno de popa com bujão.", bullet_style))

# 5. Lista de Materiais Preliminar
story.append(Spacer(1, 4))
story.append(Paragraph("5. Estimativa de Materiais para Construção (Stitch-and-Glue)", h1_style))

data_mat = [
    [Paragraph("<b>Item / Material</b>", body_style), Paragraph("<b>Especificação / Quantidade</b>", body_style), Paragraph("<b>Aplicação</b>", body_style)],
    [Paragraph("Compensado Naval 10 mm", body_style), Paragraph("5 a 6 chapas (2,44 x 1,22 m)", body_style), Paragraph("Painéis de fundo, espelho de popa e reforços", body_style)],
    [Paragraph("Compensado Naval 6 ou 8 mm", body_style), Paragraph("4 a 5 chapas (2,44 x 1,22 m)", body_style), Paragraph("Costados (laterais), bancos e piso interno", body_style)],
    [Paragraph("Madeira Maciça de Jaqueira", body_style), Paragraph("Sarrapos e pranchões selecionados", body_style), Paragraph("Roda de proa, verdugos, quilha e reforços", body_style)],
    [Paragraph("Resina Epóxi Naval", body_style), Paragraph("15 kg a 20 kg (com endurecedor)", body_style), Paragraph("Colagens, filetes (fillets) e impregnação", body_style)],
    [Paragraph("Tecido de Fibra de Vidro", body_style), Paragraph("~25 m² (300 g/m²) + Fitas biaxiais", body_style), Paragraph("Laminação externa e reforço de quinas", body_style)],
]

t_mat = Table(data_mat, colWidths=[4.5*cm, 5.0*cm, 7.5*cm])
t_mat.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), table_header_bg),
    ('GRID', (0, 0), (-1, -1), 0.5, colors.HexColor("#CBD5E0")),
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
    ('TOPPADDING', (0, 0), (-1, -1), 4),
    ('BOTTOMPADDING', (0, 0), (-1, -1), 4),
]))
story.append(t_mat)

# Footer callout
story.append(Spacer(1, 10))
callout_data = [[
    Paragraph("<b>Nota Técnica:</b> Documento elaborado para orientação preliminar de projeto. O próximo passo consiste na elaboração do plano de linhas / cotas de corte das chapas planificadas.", callout_style)
]]
t_callout = Table(callout_data, colWidths=[17.0*cm])
t_callout.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, -1), colors.HexColor("#FEFCBF")),
    ('BOX', (0, 0), (-1, -1), 1, colors.HexColor("#D69E2E")),
    ('TOPPADDING', (0, 0), (-1, -1), 6),
    ('BOTTOMPADDING', (0, 0), (-1, -1), 6),
    ('LEFTPADDING', (0, 0), (-1, -1), 8),
    ('RIGHTPADDING', (0, 0), (-1, -1), 8),
]))
story.append(t_callout)

doc.build(story)
print("PDF generated successfully at:", pdf_path)
