import json
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable

json_path = "/home/magdalena/eee/alunos/ricardo-teixeira/dados_similares.json"
pdf_path = "/home/magdalena/eee/alunos/ricardo-teixeira/Estudo_de_Similar_Ricardo_Teixeira.pdf"

with open(json_path, encoding='utf-8') as f:
    d = json.load(f)

doc = SimpleDocTemplate(
    pdf_path,
    pagesize=landscape(A4),
    leftMargin=30,
    rightMargin=30,
    topMargin=30,
    bottomMargin=30
)

styles = getSampleStyleSheet()

primary_color = colors.HexColor("#1F3864")
secondary_color = colors.HexColor("#2B6CB0")
dark_neutral = colors.HexColor("#2D3748")
light_bg = colors.HexColor("#F7FAFC")
border_color = colors.HexColor("#CBD5E0")

title_style = ParagraphStyle(
    'TitleStyle',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=13,
    leading=16,
    textColor=colors.white,
    alignment=1
)

sub_style = ParagraphStyle(
    'SubStyle',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=9,
    leading=12,
    textColor=colors.white,
    alignment=1
)

sec_title = ParagraphStyle(
    'SecTitle',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=11,
    leading=14,
    textColor=primary_color,
    spaceBefore=5,
    spaceAfter=3
)

body_text = ParagraphStyle(
    'BodyText',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8.5,
    leading=11.5,
    textColor=dark_neutral
)

tbl_hdr = ParagraphStyle(
    'TblHdr',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=8,
    leading=10,
    textColor=colors.white,
    alignment=1
)

tbl_cell = ParagraphStyle(
    'TblCell',
    parent=styles['Normal'],
    fontName='Helvetica',
    fontSize=8,
    leading=10,
    textColor=dark_neutral,
    alignment=1
)

tbl_cell_bold = ParagraphStyle(
    'TblCellBold',
    parent=styles['Normal'],
    fontName='Helvetica-Bold',
    fontSize=8,
    leading=10,
    textColor=primary_color
)

elements = []

# Header Box
h_data = [
    [Paragraph("<b>CURSO DE DESIGN PROFISSIONAL DE EMBARCAÇÕES</b> — BRANA & ESTALEIRO ESCOLA EMBRIÃO (EEE)", sub_style)],
    [Paragraph("ESTUDO DE SIMILARES (PESQUISA PARAMÉTRICA NAVAL)", title_style)]
]
h_table = Table(h_data, colWidths=[780])
h_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), primary_color),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
elements.append(h_table)
elements.append(Spacer(1, 6))

# Meta
meta_data = [
    [Paragraph(f"<b>Projetista:</b> {d['projetista']}", body_text), Paragraph(f"<b>Data:</b> {d['data']}", body_text), Paragraph("<b>Status:</b> Aprovado", body_text)],
    [Paragraph(f"<b>Embarcação Pretendida:</b> {d['embarcacao_pretendida']}", body_text), Paragraph("<b>Origem / Matriz:</b> Recôncavo Baiano & Portugal", body_text), Paragraph("<b>Unidades:</b> Sistema Métrico (SI)", body_text)]
]
m_table = Table(meta_data, colWidths=[380, 260, 140])
m_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), light_bg),
    ('BOX', (0,0), (-1,-1), 0.5, border_color),
    ('INNERGRID', (0,0), (-1,-1), 0.5, border_color),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('RIGHTPADDING', (0,0), (-1,-1), 5),
]))
elements.append(m_table)
elements.append(Spacer(1, 6))

# Tabela Comparativa Completa
elements.append(Paragraph("Tabela Comparativa de Embarcações Similares", sec_title))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=4, spaceBefore=1))

# Headers
sims = d['similares']
th = [Paragraph("<b>Parâmetro Naval</b>", tbl_hdr), Paragraph("<b>Projeto Ricardo</b>", tbl_hdr)]
for s in sims:
    th.append(Paragraph(f"<b>{s['nome']}</b><br/>{s.get('ano', 'Tradicional')}", tbl_hdr))

rows = [th]

# Dados do projeto de Ricardo
proj_dados = {
    "origem": "Maragogipe (BA)",
    "loa": "7,50 m",
    "boa": "2,50 m",
    "calado": "0,38 m",
    "loa_boa": "3,00",
    "propulsao": "Vela de içar + Rabeta diesel 13,5 HP + Vara",
    "construcao": "Carvela calafetada / Tijupá / Popa torada"
}

param_defs = [
    ("Origem / Porto", "origem", [
        "Capanema / Maragogipe",
        "Maragogipe (BA)",
        "Ribeira / Salvador (BA)",
        "Maragogipinho / Jaguaripe",
        "Estuário do Tejo (Portugal)",
        "Ovar / Aveiro (Portugal)"
    ]),
    ("Comprimento Total (LOA)", "loa", ["12,50 m", "14,00 m", "7,00 m", "12,20 m", "9,50 m", "8,50 m"]),
    ("Boca Máxima (BOA)", "boa", ["4,00 m", "4,60 m", "2,25 m", "3,90 m", "2,80 m", "2,40 m"]),
    ("Calado de Casco (T)", "calado", ["0,60 m", "—", "—", "0,60 m", "0,50 m", "—"]),
    ("Razão LOA / BOA", "loa_boa", ["3,12", "3,04", "3,11", "3,13", "3,39", "3,54"]),
    ("Propulsão Principal / Aux.", "propulsao", [
        "Vela de içar + Diesel",
        "Vela de içar + Motor",
        "Vela de içar",
        "Vela de içar + Diesel",
        "Vela latina/içar + Remos",
        "Vela de espicha + Varas"
    ]),
    ("Construção / Fechamento", "construcao", [
        "Carvela / Tijupá / Torada",
        "Carvela / Tijupá / Torada",
        "Carvela / Tijupá / Torada",
        "Carvela / Tijupá / Torada",
        "Meia-quilha / Assenta fundo",
        "Fundo chato / Encalhe praia"
    ])
]

for label, pkey, sim_vals in param_defs:
    r = [Paragraph(f"<b>{label}</b>", tbl_cell_bold), Paragraph(proj_dados[pkey], tbl_cell_bold)]
    for sv in sim_vals:
        r.append(Paragraph(sv, tbl_cell))
    rows.append(r)

col_w = [150, 95, 90, 85, 80, 85, 95, 100]
sim_table = Table(rows, colWidths=col_w)
sim_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), primary_color),
    ('BACKGROUND', (1,1), (1,-1), colors.HexColor("#EBF8FF")), # Coluna Ricardo destacada
    ('GRID', (0,0), (-1,-1), 0.5, border_color),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 3),
    ('RIGHTPADDING', (0,0), (-1,-1), 3),
]))
elements.append(sim_table)
elements.append(Spacer(1, 8))

# Leitura Paramétrica e Recomendações
elements.append(Paragraph("Leitura Paramétrica e Conclusões Técnicas", sec_title))
elements.append(HRFlowable(width="100%", thickness=1, color=secondary_color, spaceAfter=4, spaceBefore=1))

p_concl = (
    "<b>1. Consistência Geométrica:</b> A relação comprimento/boca (LOA/BOA) de todos os saveiros baianos analisados "
    "situa-se estritamente entre <b>3,04 e 3,13</b>. O projeto de Ricardo Teixeira com a nova boca (LOA 7,50 m / BOA 2,50 m = <b>3,00</b>) "
    "aproxima-se diretamente da proporção de saveiros de carga consagrados como o <i>Vendaval II</i> (LOA/BOA = 3,04), maximizando a estabilidade inicial de forma e a praça de carga.<br/>"
    "<b>2. Respaldo Dimensional Direto:</b> O saveiro <i>Joia Rara</i> (LOA 7,00 m / BOA ~2,25 m) e as variantes menores do "
    "<i>Bote de Meia-Quilha do Tejo</i> (7 a 9 m) comprovam que o porte de 7 metros com tijupá é plenamente viável e eficiente "
    "para transporte de carga estuarino.<br/>"
    "<b>3. Operação de Fundo e Praia:</b> Tanto o <i>Bote Cacilheiro</i> quanto o <i>Saveiro da Ria de Aveiro</i> foram projetados "
    "para assentar no fundo ou encalhar na areia na maré baixa sem tombar, respaldando o fundo protegido e calado de 0,38 m do projeto.<br/>"
    "<b>4. Propulsão Tradicional:</b> A mastreação sem estais de vela de içar, aliada à vara/pau de varejar e à rabeta diesel, "
    "consolida a mais autêntica e eficiente solução para o tráfego Maragogipe–Salvador."
)
elements.append(Paragraph(p_concl, body_text))
elements.append(Spacer(1, 6))

elements.append(Paragraph("<i>Fontes documentais: IPHAN (Proc. 1.615-T-2010), UFRB/PPGAP (Batista, 2023), Revista da Armada (Marinha Portuguesa, Ed. 470 e 358) e Associação Viva Saveiro.</i>", ParagraphStyle('Foot', fontName='Helvetica-Oblique', fontSize=7.5, textColor=colors.gray, alignment=1)))

doc.build(elements)
print("PDF comparativo gerado com sucesso!")
