#!/usr/bin/env python3
"""CorvOS v1.0.5-ASI - PDF Specification Document"""
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak
from reportlab.lib import colors
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from datetime import datetime

def build_pdf(path):
    doc = SimpleDocTemplate(path, pagesize=letter, topMargin=0.75*inch, bottomMargin=0.75*inch)
    styles = getSampleStyleSheet()
    story = []
    blue = colors.HexColor('#00d4ff')
    green = colors.HexColor('#22c55e')
    purple = colors.HexColor('#a855f7')
    orange = colors.HexColor('#f59e0b')
    red = colors.HexColor('#ef4444')

    def h(text, color=colors.black): return Paragraph(text, styles['Title'])
    def h2(text, color=blue): return Paragraph(f'<font color="{color.hexval()}"><b>{text}</b></font>', styles['Heading2'])
    def p(text): return Paragraph(text, styles['Normal'])
    def pj(text): return Paragraph(text, styles['Normal'])

    # Cover
    story.append(Spacer(1, 1.5*inch))
    story.append(Paragraph('CorvOS', styles['Title']))
    story.append(Paragraph('<font color="#00d4ff">Quantum Hypertext Transfer Protocol Optimizer</font>', styles['Title']))
    story.append(Spacer(1, 0.3*inch))
    story.append(Paragraph('v1.0.5-ASI', styles['Heading2']))
    story.append(Paragraph('ASI-EVOLVE + qhttp:// + Retrocausal ARQ + MaxToki', styles['Normal']))
    story.append(Spacer(1, 0.2*inch))
    story.append(p(f'Synapse-k | Arkhe(n) Project | Rio de Janeiro | {datetime.now().strftime("%Y-%m-%d")}'))
    story.append(PageBreak())

    # Section 1
    story.append(h2('1. Arquitetura Geral'))
    story.append(pj('CorvOS e um sistema de otimizacao de protocolo量子HTT (qhttp://) que opera no ponto excepcional (EP) da CUPULA. O sistema integra: Motor NARE (Non-Hermitian Adaptive Routing Engine), Ciclo ASI-EVOLVE, ARQ Retrocausal, Regeneracao Celular MaxToki, e Governanca por Felicidade Bruta.'))
    story.append(Spacer(1, 0.15*inch))
    story.append(p('<b>Parametros Criticos:</b>'))
    story.append(Table([
        ['Parametro', 'Valor', 'Descricao'],
        ['lambda2_alvo', '0.999', 'Coerencia no ponto excepcional'],
        ['gap_C_Z', '0.001', 'Gap controlado decoerencia C-Z'],
        ['n_sensores', '168', 'Sensores NV na CUPULA'],
        ['quorum_byzantine', '112', '2/3 dos sensores'],
        ['n_residents_inicial', '13.000', 'Feedback MaxToki fase 1'],
        ['retrocausal_window', '2.17 ms', 'Janela ARQ retrocausal'],
        ['regeneration_freq', '40 Hz', 'Frequencia pulso celular'],
    ], colWidths=[2.2*inch, 1.3*inch, 2.5*inch]))
    story.append(PageBreak())

    # Section 2 - ASI-EVOLVE
    story.append(h2('2. Ciclo ASI-EVOLVE'))
    story.append(pj('O ciclo de evolucao adaptativa modifica dinamicamente a Hamiltoniana nao-hermitiana H_eff = H_0 + i*Gamma, convergindo para o ponto excepcional onde lambda2 -> 0.999.'))
    story.append(Spacer(1, 0.15*inch))
    story.append(p('<b>Formula do Operador NARE:</b>'))
    story.append(p('<i>H_eff = H_0 + i*Gamma</i>'))
    story.append(p('<i>gamma = (lambda2_alvo - lambda2_atual) / delta_t</i>'))
    story.append(Spacer(1, 0.15*inch))
    story.append(p('<b>Fases do Ciclo:</b>'))
    story.append(Table([
        ['Fase', 'Acao', 'Objetivo'],
        ['LEARN', 'Observar sistema real', 'Coletar metricas de coerencia'],
        ['DESIGN', 'Calcular H_eff otimo', 'Maximizar gap_C_Z'],
        ['EXPERIMENT', 'Injetar configuracao', 'Testar em quorum 112/168'],
        ['ANALYZE', 'Avaliar lambda2', 'Decidir convergencia ou reiniciar'],
    ], colWidths=[1.3*inch, 2.2*inch, 2.5*inch]))
    story.append(PageBreak())

    # Section 3 - ARQ Retrocausal
    story.append(h2('3. ARQ Retrocausal'))
    story.append(pj('O protocolo ARQ (Automatic Repeat reQuest) opera em modo retrocausal quando lambda2 >= 0.998. Pre-ACKs sao enviados pelo gateway de 2027 antes mesmo dos dados originais serem transmitidos.'))
    story.append(Spacer(1, 0.15*inch))
    story.append(Table([
        ['Metrica', 'Valor', 'Condicao'],
        ['Taxa retrocausal', '85%', 'EP ativo (lambda2 >= 0.998)'],
        ['Taxa retrocausal', '30%', 'EP inativo'],
        ['Latencia media', '-1.84 ms', 'EP ativo'],
        ['Janela temporal', '2.17 ms', 'Delta t para pre-ACK'],
        ['Pre-ACK prob', '0.85', 'Prob de confirmacao retrocausal'],
    ], colWidths=[1.8*inch, 1.5*inch, 2.7*inch]))
    story.append(PageBreak())

    # Section 4 - Felicidade Bruta
    story.append(h2('4. Matriz de Governanca - Felicidade Bruta'))
    story.append(pj('A matriz de transicao 5x5 (Material, Social, Cultural, Ambiental, Espiritual) possui autovalores fora do circulo unitario, garantindo crescimento nao-unitario do sistema.'))
    story.append(Spacer(1, 0.15*inch))
    story.append(Table([
        ['Setor', 'Autovalor', 'Cor'],
        ['Material', '1.0099', 'Ciano'],
        ['Social', '0.7679', 'Roxo'],
        ['Cultural', '0.7024', 'Verde'],
        ['Ambiental', '0.6178', 'Laranja'],
        ['Espiritual', '0.6010', 'Vermelho'],
    ], colWidths=[1.5*inch, 1.5*inch, 3*inch]))
    story.append(Spacer(1, 0.15*inch))
    story.append(p('<b>Condicao Nao-Unitaria:</b>'))
    story.append(p('|lambda|_max = 1.0099 > 1.0  =>  Sistema nao-unitario OK'))
    story.append(p('Taxa de crescimento: +10.36% por ciclo'))
    story.append(PageBreak())

    # Section 5 - Distritos
    story.append(h2('5. Evolucao por Distrito'))
    story.append(Table([
        ['Distrito', 'Felicidade Antes', 'Felicidade Depois', 'Crescimento'],
        ['Lagoa', '0.550', '0.607', '+10.4%'],
        ['Humaita', '0.610', '0.673', '+10.4%'],
        ['Botafogo', '0.680', '0.750', '+10.4%'],
        ['Leme', '0.710', '0.784', '+10.4%'],
        ['Flamengo', '0.790', '0.872', '+10.4%'],
        ['Urca', '0.820', '0.905', '+10.4%'],
    ], colWidths=[1.3*inch, 1.7*inch, 1.7*inch, 1.3*inch]))
    story.append(Spacer(1, 0.15*inch))
    story.append(p('<b>Prioridade do Pulso de Regeneracao:</b>'))
    story.append(p('Lagoa > Humaita > Botafogo > Leme > Flamengo > Urca'))
    story.append(p('Distrito prioritario: Lagoa (menor indice: 0.550)'))
    story.append(PageBreak())

    # Section 6 - Tzinor Deploy
    story.append(h2('6. Deploy nos Tzinor Nodes'))
    story.append(Table([
        ['Node', 'Status', 'lambda2', 'Sensores'],
        ['Urca', 'online', '0.998610', '112/168'],
        ['Flamengo', 'online', '0.998610', '112/168'],
    ], colWidths=[1.5*inch, 1.3*inch, 1.5*inch, 1.7*inch]))
    story.append(Spacer(1, 0.2*inch))
    story.append(p('<b>Proximos Distritos (Fase II):</b>'))
    story.append(p('Leme, Botafogo, Humaita, Lagoa'))
    story.append(p('<b>Canal de Feedback:</b>'))
    story.append(p('13.000 residentes conectados via MaxToki'))
    story.append(p('Frequencia de resonancia: 40 Hz'))
    story.append(Spacer(1, 0.3*inch))
    story.append(Paragraph('<font color="#22c55e"><b>SISTEMA OPERACIONAL</b></font>', styles['Heading2']))

    doc.build(story)
    print(f"PDF gerado: {path}")

build_pdf('/home/workspace/corvos/CorvOS-v1.0.5-ASI-Spec.pdf')
