import os
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.pdfgen import canvas

class NumberedLandscapeCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        super(NumberedLandscapeCanvas, self).__init__(*args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_page_decorations(num_pages)
            super(NumberedLandscapeCanvas, self).showPage()
        super(NumberedLandscapeCanvas, self).save()

    def draw_page_decorations(self, page_count):
        self.saveState()
        # Header (páginas > 1)
        if self._pageNumber > 1:
            self.setFont("Helvetica-Bold", 8)
            self.setFillColor(colors.HexColor("#0B2545"))
            self.drawString(40, 560, "BRANA | ESCOLA DE ENGENHARIA NAVAL — ESTUDO DE EMBARCAÇÕES SEMELHANTES")
            self.setFont("Helvetica", 8)
            self.setFillColor(colors.HexColor("#64748B"))
            self.drawRightString(802, 560, "Grupo 2 • Aluna: Alessandra Feitosa")
            self.setStrokeColor(colors.HexColor("#CBD5E1"))
            self.setLineWidth(0.5)
            self.line(40, 552, 802, 552)

        # Footer
        self.setFont("Helvetica", 8)
        self.setFillColor(colors.HexColor("#64748B"))
        self.drawString(40, 25, "Brana Escola de Engenharia Naval • Estaleiro Escola Embrião (EEE) • Orientação: Magdalena (Mada)")
        page_text = f"Página {self._pageNumber} de {page_count}"
        self.drawRightString(802, 25, page_text)
        self.setStrokeColor(colors.HexColor("#CBD5E1"))
        self.setLineWidth(0.5)
        self.line(40, 35, 802, 35)
        self.restoreState()

def gerar_pdf_estudo_similares(pdf_path):
    doc = SimpleDocTemplate(
        pdf_path,
        pagesize=landscape(A4),
        leftMargin=40,
        rightMargin=40,
        topMargin=35,
        bottomMargin=45
    )

    styles = getSampleStyleSheet()

    c_primary = colors.HexColor("#0B2545")
    c_secondary = colors.HexColor("#134074")
    c_accent = colors.HexColor("#0077B6")
    c_dark = colors.HexColor("#1E293B")
    c_light_bg = colors.HexColor("#F8FAFC")
    c_header_bg = colors.HexColor("#0F3E6D")
    c_sub_bg = colors.HexColor("#E2E8F0")

    h1_style = ParagraphStyle(
        'H1',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=11,
        leading=14,
        textColor=c_primary,
        spaceBefore=8,
        spaceAfter=4,
        keepWithNext=True
    )

    body_style = ParagraphStyle(
        'Body',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=8,
        leading=11,
        textColor=c_dark,
        spaceAfter=4
    )

    th_style = ParagraphStyle(
        'TH',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=7.5,
        leading=9.5,
        textColor=colors.white,
        alignment=1
    )

    th_left = ParagraphStyle(
        'THL',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=7.5,
        leading=9.5,
        textColor=colors.white,
        alignment=0
    )

    tc_param = ParagraphStyle(
        'TCP',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=7.5,
        leading=9.5,
        textColor=c_primary
    )

    tc_unid = ParagraphStyle(
        'TCU',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=7.5,
        leading=9.5,
        textColor=colors.HexColor("#475569"),
        alignment=1
    )

    tc_val = ParagraphStyle(
        'TCV',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=7.5,
        leading=9.5,
        textColor=c_dark,
        alignment=1
    )

    tc_bold = ParagraphStyle(
        'TCVB',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=7.5,
        leading=9.5,
        textColor=c_primary,
        alignment=1
    )

    story = []

    # Cabeçalho
    header_data = [
        [
            Paragraph("<b>BRANA</b><br/><font size=7 color='#64748B'>ESCOLA DE ENGENHARIA NAVAL</font>", ParagraphStyle('HLogo', fontName='Helvetica-Bold', fontSize=13, leading=14, textColor=c_primary)),
            Paragraph("<b>ESTUDO DE EMBARCAÇÕES SEMELHANTES (BENCHMARKING PARAMÉTRICO)</b><br/><font size=7.5 color='#134074'>Projeto de Embarcação • Curso de Design Profissional de Embarcações • <b>GRUPO 2</b></font>", ParagraphStyle('HTitle', fontName='Helvetica-Bold', fontSize=9.5, leading=12, textColor=c_secondary, alignment=2))
        ]
    ]
    t_header = Table(header_data, colWidths=[220, 542])
    t_header.setStyle(TableStyle([
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ]))
    story.append(t_header)
    story.append(HRFlowable(width="100%", thickness=1.5, color=c_primary, spaceBefore=0, spaceAfter=8))

    # Tabela principal de parâmetros
    table_data = [
        [
            Paragraph("PARÂMETRO", th_left),
            Paragraph("UNID.", th_style),
            Paragraph("1<br/><b>SAVEIRO DAY USE</b>", th_style),
            Paragraph("2<br/><b>É DA VIDA (Madeira)</b>", th_style),
            Paragraph("3<br/><b>ISLE PACKET MADAGASCAR</b>", th_style),
            Paragraph("4<br/><b>SHANNON 38</b>", th_style),
            Paragraph("5<br/><b>DHOW TRADICIONAL</b>", th_style),
            Paragraph("MÉDIA / FAIXA", th_style)
        ],
        [Paragraph("Comprimento total (LOA)", tc_param), Paragraph("m", tc_unid), Paragraph("12,00", tc_val), Paragraph("12,20", tc_val), Paragraph("12,65", tc_val), Paragraph("11,51", tc_val), Paragraph("12,50", tc_val), Paragraph("<b>12,17 m</b>", tc_bold)],
        [Paragraph("Comprimento na linha d'água (LWL)", tc_param), Paragraph("m", tc_unid), Paragraph("10,28", tc_val), Paragraph("10,50", tc_val), Paragraph("10,06", tc_val), Paragraph("9,40", tc_val), Paragraph("10,20", tc_val), Paragraph("<b>10,09 m</b>", tc_bold)],
        [Paragraph("Boca máxima (BOA)", tc_param), Paragraph("m", tc_unid), Paragraph("3,80", tc_val), Paragraph("3,75", tc_val), Paragraph("3,86", tc_val), Paragraph("3,51", tc_val), Paragraph("3,60", tc_val), Paragraph("<b>3,70 m</b>", tc_bold)],
        [Paragraph("Calado (T)", tc_param), Paragraph("m", tc_unid), Paragraph("1,10", tc_val), Paragraph("1,15", tc_val), Paragraph("1,52", tc_val), Paragraph("1,52", tc_val), Paragraph("1,20", tc_val), Paragraph("<b>1,30 m</b>", tc_bold)],
        [Paragraph("Deslocamento (&Delta;)", tc_param), Paragraph("kg", tc_unid), Paragraph("10.330", tc_val), Paragraph("11.500", tc_val), Paragraph("9.752", tc_val), Paragraph("8.391", tc_val), Paragraph("11.000", tc_val), Paragraph("<b>10.195 kg</b>", tc_bold)],
        [Paragraph("Ângulo de V do fundo (deadrise)", tc_param), Paragraph("graus", tc_unid), Paragraph("Bojo Redondo / Quilha Corrida", tc_val), Paragraph("Bojo Alcatruz", tc_val), Paragraph("Quilha Corrida", tc_val), Paragraph("11°", tc_val), Paragraph("V Suave 8°", tc_val), Paragraph("Quilha Corrida / V Suave", tc_val)],
        [Paragraph("Potência instalada", tc_param), Paragraph("HP", tc_unid), Paragraph("39", tc_val), Paragraph("35", tc_val), Paragraph("50", tc_val), Paragraph("40", tc_val), Paragraph("40", tc_val), Paragraph("<b>40,8 HP</b>", tc_bold)],
        [Paragraph("Motorização (marca / modelo)", tc_param), Paragraph("—", tc_unid), Paragraph("1x Yanmar 3JH40", tc_val), Paragraph("1x MWM", tc_val), Paragraph("1x Yanmar 4JH-D", tc_val), Paragraph("1x Westerbeke", tc_val), Paragraph("1x Yanmar 4JH4", tc_val), Paragraph("Yanmar / MWM", tc_val)],
        [Paragraph("Área vélica (se veleiro)", tc_param), Paragraph("m²", tc_unid), Paragraph("80,00", tc_val), Paragraph("78,00", tc_val), Paragraph("80,83", tc_val), Paragraph("65,31", tc_val), Paragraph("85,00", tc_val), Paragraph("<b>77,83 m²</b>", tc_bold)],
        [Paragraph("Combustível (Diesel)", tc_param), Paragraph("L", tc_unid), Paragraph("150", tc_val), Paragraph("120", tc_val), Paragraph("216", tc_val), Paragraph("265", tc_val), Paragraph("180", tc_val), Paragraph("<b>186 L</b>", tc_bold)],
        [Paragraph("Água doce", tc_param), Paragraph("L", tc_unid), Paragraph("200", tc_val), Paragraph("200", tc_val), Paragraph("200", tc_val), Paragraph("200", tc_val), Paragraph("250", tc_val), Paragraph("<b>210 L</b>", tc_bold)],
        [Paragraph("Velocidade máxima", tc_param), Paragraph("nós", tc_unid), Paragraph("8,0", tc_val), Paragraph("7,8", tc_val), Paragraph("7,7", tc_val), Paragraph("7,4", tc_val), Paragraph("7,5", tc_val), Paragraph("<b>7,68 nós</b>", tc_bold)],
        [Paragraph("Velocidade de cruzeiro", tc_param), Paragraph("nós", tc_unid), Paragraph("6,0", tc_val), Paragraph("5,5", tc_val), Paragraph("6,5", tc_val), Paragraph("6,2", tc_val), Paragraph("5,8", tc_val), Paragraph("<b>6,00 nós</b>", tc_bold)],
        [Paragraph("Autonomia estimada", tc_param), Paragraph("MN", tc_unid), Paragraph("180", tc_val), Paragraph("150", tc_val), Paragraph("280", tc_val), Paragraph("320", tc_val), Paragraph("200", tc_val), Paragraph("<b>226 MN</b>", tc_bold)],
        # SEÇÃO DE RAZÕES
        [Paragraph("<b>RAZÕES DE PROJETO (Adimensionais / Coeficientes)</b>", ParagraphStyle('SubSec', parent=tc_param, textColor=colors.HexColor("#0F3E6D"))), Paragraph("", tc_unid), Paragraph("", tc_val), Paragraph("", tc_val), Paragraph("", tc_val), Paragraph("", tc_val), Paragraph("", tc_val), Paragraph("", tc_val)],
        [Paragraph("Razão de Esbeltez (LOA / BOA)", tc_param), Paragraph("—", tc_unid), Paragraph("3,16", tc_val), Paragraph("3,25", tc_val), Paragraph("3,28", tc_val), Paragraph("3,28", tc_val), Paragraph("3,47", tc_val), Paragraph("<b>3,29</b>", tc_bold)],
        [Paragraph("Razão Deslocamento-Comprimento (DLR)", tc_param), Paragraph("—", tc_unid), Paragraph("265,0", tc_val), Paragraph("276,9", tc_val), Paragraph("267,0", tc_val), Paragraph("281,6", tc_val), Paragraph("288,9", tc_val), Paragraph("<b>275,9 (Pesado)</b>", tc_bold)],
        [Paragraph("Razão Deslocamento / Potência", tc_param), Paragraph("kg/HP", tc_unid), Paragraph("264,9", tc_val), Paragraph("328,6", tc_val), Paragraph("195,0", tc_val), Paragraph("209,8", tc_val), Paragraph("275,0", tc_val), Paragraph("<b>254,7 kg/HP</b>", tc_bold)],
    ]

    col_widths = [162, 35, 93, 93, 105, 88, 93, 93]
    t = Table(table_data, colWidths=col_widths)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), c_header_bg),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 2.5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 2.5),
        ('LEFTPADDING', (0,0), (-1,-1), 3),
        ('RIGHTPADDING', (0,0), (-1,-1), 3),
        ('BOX', (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E1")),
        ('INNERGRID', (0,0), (-1,-1), 0.5, colors.HexColor("#E2E8F0")),
        # Linha de divisão de razões
        ('SPAN', (0,15), (-1,15)),
        ('BACKGROUND', (0,15), (-1,15), c_sub_bg),
        ('TOPPADDING', (0,15), (-1,15), 3),
        ('BOTTOMPADDING', (0,15), (-1,15), 3),
        # Linhas zebradas suaves
        ('BACKGROUND', (0,1), (-1,1), colors.white),
        ('BACKGROUND', (0,2), (-1,2), c_light_bg),
        ('BACKGROUND', (0,3), (-1,3), colors.white),
        ('BACKGROUND', (0,4), (-1,4), c_light_bg),
        ('BACKGROUND', (0,5), (-1,5), colors.white),
        ('BACKGROUND', (0,6), (-1,6), c_light_bg),
        ('BACKGROUND', (0,7), (-1,7), colors.white),
        ('BACKGROUND', (0,8), (-1,8), c_light_bg),
        ('BACKGROUND', (0,9), (-1,9), colors.white),
        ('BACKGROUND', (0,10), (-1,10), c_light_bg),
        ('BACKGROUND', (0,11), (-1,11), colors.white),
        ('BACKGROUND', (0,12), (-1,12), c_light_bg),
        ('BACKGROUND', (0,13), (-1,13), colors.white),
        ('BACKGROUND', (0,14), (-1,14), c_light_bg),
        ('BACKGROUND', (0,16), (-1,16), colors.white),
        ('BACKGROUND', (0,17), (-1,17), c_light_bg),
        ('BACKGROUND', (0,18), (-1,18), colors.white),
        # Coluna média destacada
        ('BACKGROUND', (7,1), (7,14), colors.HexColor("#F1F5F9")),
        ('BACKGROUND', (7,16), (7,18), colors.HexColor("#F1F5F9")),
    ]))
    story.append(t)
    story.append(Spacer(1, 8))

    # Análise de Engenharia Naval e Conclusões
    obs_data = [
        [
            Paragraph(
                "<b>ANÁLISE DE ENGENHARIA NAVAL & SÍNTESE PARAMÉTRICA DO GRUPO 2:</b><br/>"
                "• <b>Faixa Dimensional de Referência:</b> LOA médio de ~12,2 m (40 pés), Boca média de 3,70 m e Calado de 1,10 a 1,50 m. Configuração típica de veleiros e saveiros de cruzeiro costeiro/oceânico.<br/>"
                "• <b>Comportamento Hidrodinâmico (DLR ~ 276):</b> Todas as 5 embarcações se situam na faixa de <i>Deslocamento Pesado / Cruzeiro Oceânico Robusto (DLR entre 260 e 290)</i>, garantindo excelente estabilidade de peso, capacidade de carga e conforto de mar aberto.<br/>"
                "• <b>Relação Deslocamento/Potência (~255 kg/HP):</b> Motorização auxiliar de 35 a 50 HP perfeitamente calibrada para manobras portuárias, cruzeiro econômico de 5,5 a 6,5 nós e superação de correntes moderadas.",
                ParagraphStyle('Obs', fontName='Helvetica', fontSize=7.5, leading=10.5, textColor=c_primary)
            )
        ]
    ]
    t_obs = Table(obs_data, colWidths=[762])
    t_obs.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#E0F2FE")),
        ('BOX', (0,0), (-1,-1), 1, c_accent),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    story.append(t_obs)

    doc.build(story, canvasmaker=NumberedLandscapeCanvas)
    print("PDF de estudo de similares gerado em:", pdf_path)

if __name__ == "__main__":
    pdf_g2 = "/home/magdalena/eee/grupos/grupo-2/estudo_similares_grupo_2.pdf"
    pdf_aluna = "/home/magdalena/eee/alunos/alessandra-feitosa/estudo_similares_grupo_2.pdf"
    gerar_pdf_estudo_similares(pdf_g2)
    gerar_pdf_estudo_similares(pdf_aluna)
