import os

import json

from datetime import datetime


class CentralGovernancaNexus:
    """
    Gerador automatizado da infraestrutura de deploy, governanca e
    testes em massa da Matriz Universal MindCore Core.
    """

    @staticmethod
    def gerar_script_deploy():
        """Gera o script bash automatizado para deploy em servidores de producao Linux (Ubuntu/Debian)."""
        conteudo_bash = """#!/bin/bash
# =====================================================================
# SCRIPT DE DEPLOY AUTOMATIZADO - MINDCORE CORE v4.0
# =====================================================================

echo "Iniciando Deploy de Infraestrutura MindCore..."
sudo apt-get update && sudo apt-get upgrade -y

echo "Instalando dependencias de sistema (Python 3 e Pip)..."
sudo apt-get install python3 python3-pip python3-venv git -y

echo "Criando ambiente virtual isolado..."
python3 -m venv venv
source venv/bin/activate

echo "Instalando bibliotecas de engine grafica e relatorios..."
pip install --upgrade pip
pip install reportlab

echo "Configurando persistencia fisica do banco de dados local..."
if [ ! -f "historico_matriz_nexus.csv" ]; then
    echo "Data,Nome,Pilar,IEH,Classificacao,Sub_Indicadores,Dataset_Charts" > historico_matriz_nexus.csv
    echo "Arquivo de banco historico inicializado."
fi

echo "Configurando servico permanente em segundo plano (Systemd)..."
cat <<EOT | sudo tee /etc/systemd/system/nexus5d.service
[Unit]
Description=MindCore Core Engine Service
After=network.target

[Service]
User=$USER
WorkingDirectory=$(pwd)
ExecStart=$(pwd)/venv/bin/python3 matriz_nexus.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOT

sudo systemctl daemon-reload
sudo systemctl enable nexus5d.service
sudo systemctl start nexus5d.service

echo "DEPLOY EXECUTADO COM SUCESSO. A MATRIZ AGORA E PERMANENTE."
"""
        nome_arquivo = "deploy_nexus.sh"
        with open(nome_arquivo, "w", encoding="utf-8", newline="\n") as f:
            f.write(conteudo_bash)
        return nome_arquivo

    @staticmethod
    def gerar_simulador_lote():
        """Gera um modulo auxiliar em Python para simulacao de estresse de dados em lote."""
        conteudo_simulador = """import random
import csv
import json
from datetime import datetime
from matriz_nexus import MatrizUniversalNexus, GeradorMetasUniversais, DatabaseCloudNexus


def executar_simulacao_lote(quantidade_usuarios=50):
    print(f"Iniciando simulacao de teste de carga para {quantidade_usuarios} operadores simultaneos...")

    nomes_teste = ["Ana", "Carlos", "Beatriz", "Diego", "Elena", "Fernando", "Gabriel", "Helena", "Igor", "Julia"]
    sobrenomes = ["Silva", "Santos", "Oliveira", "Souza", "Rodrigues", "Ferreira", "Almeida", "Pereira"]

    for i in range(quantidade_usuarios):
        operador = f"{random.choice(nomes_teste)} {random.choice(sobrenomes)} #{random.randint(100, 999)}"
        pilar_aleatorio = random.randint(1, 5)

        # Injeta variacoes matematicas para testar as curvas de calibracao
        v1 = round(random.uniform(5, 15), 2) if pilar_aleatorio == 1 else round(random.uniform(50, 450), 2)
        v2 = round(random.uniform(2, 9), 2)
        v3 = round(random.uniform(3, 10), 2)
        tempo = round(random.uniform(1, 50), 1)

        nome_pilar, sub_nomes, ieh, notas_norm, tempo_anos, _ep, _et = MatrizUniversalNexus.processar_pilar_complexo(
            pilar_aleatorio, [v1, v2, v3, tempo]
        )
        estagio = GeradorMetasUniversais.classificar_estagio_humano(ieh)
        chart_json = GeradorMetasUniversais.estruturar_dataset_graficos(nome_pilar, sub_nomes, notas_norm, ieh)

        dados_registro = {
            "data": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "usuario": operador, "pilar": nome_pilar, "ieh": ieh, "estagio": estagio,
            "sub_indicadores": [v1, v2, v3], "tempo": tempo_anos, "charts": chart_json
        }

        DatabaseCloudNexus.conectar_e_persistir(dados_registro)

    print(f"Injecao em lote concluida. {quantidade_usuarios} registros consolidados no banco .csv.")


if __name__ == '__main__':
    executar_simulacao_lote(30)
"""
        nome_arquivo = "simulador_lote.py"
        with open(nome_arquivo, "w", encoding="utf-8") as f:
            f.write(conteudo_simulador)
        return nome_arquivo

    @staticmethod
    def gerar_manual_governanca():
        """Gera o manual de arquitetura e governanca tecnica da Matriz em formato Markdown."""
        conteudo_md = r"""# MANUAL DE GOVERNANCA E ARQUITETURA — MINDCORE CORE v4.0

## 1. INTRODUCAO E PROPOSITO
A **Matriz Universal Nexus** e uma infraestrutura matematica permanente criada para mapear, normalizar e calibrar as competencias e picos de performance humana em relacao aos maiores recordes documentados na historia da humanidade. O sistema opera de forma agnostica, confiavel e expansiva.

## 2. ARQUITETURA MATEMATICA DO MOTOR (ENGINE)
O calculo do **Indice de Expansao Humana (IEH)** e derivado de duas dimensoes centrais equilibradas por meio de uma media geometrica:

$$\text{IEH} = \sqrt{\text{Eficiencia de Pico Ponderada} \times \text{Estabilidade Temporal}}$$

### 2.1 Mapeamento de Sub-Indicadores Ponderados
Cada pilar possui 3 dimensoes moleculares avaliadas sob a distribuicao de pesos de excelencia **(40% / 30% / 30%)** ou **(30% / 40% / 30%)**, dependendo do pilar.
* **Formula Min-Max Aplicada:** $N_{norm} = \frac{V_{atual} - V_{min}}{V_{max} - V_{min}}$

### 2.2 Curva Logistica de Tempo (Sigmoide)
Para certificar a longevidade estrategica e consistencia profissional, o tempo de dedicacao ativa do operador e processado atraves de uma equacao sigmoide ajustada:
* **Formula:** $f(x) = \frac{1}{1 + e^{-10 \cdot (x - 0.5)}}$

Isso impede oscilacoes provocadas por impulsos momentaneos de performance, blindando a confiabilidade historica da metrica.

## 3. IDENTIDADE VISUAL E DESIGN SYSTEM
Para manter a uniformidade estetica do ecossistema, todas as interfaces fisicas e saidas digitais em PDF devem obedecer estritamente a paleta oficial:
* **Obsidiana (`#0B0F19`):** Fundo principal de tela e contraste de modo escuro.
* **Violeta (`#6D28D9`):** Cabecalhos primarios, paineis estruturais e titulos executivos.
* **Magenta (`#D946EF`):** Indicadores de pico, alertas de expansao e linhas de grade vetoriais.

## 4. DIRETRIZES DE SEGURANCA E BACKUP
1. **Imutabilidade:** Os registros gravados no arquivo `.csv` recebem travas logicas baseadas em data/hora estruturada.
2. **Sincronizacao:** Toda transacao executada na ponta do terminal do operador gera um trigger imediato de transmissao de payload em JSON estruturado para o frontend web.
"""
        nome_arquivo = "GOVERNANCA_NEXUS.md"
        with open(nome_arquivo, "w", encoding="utf-8") as f:
            f.write(conteudo_md)
        return nome_arquivo


# =====================================================================
# EXECUCAO DO GERADOR AUTOMATICO
# =====================================================================
if __name__ == "__main__":
    f_deploy = CentralGovernancaNexus.gerar_script_deploy()
    f_lote = CentralGovernancaNexus.gerar_simulador_lote()
    f_gov = CentralGovernancaNexus.gerar_manual_governanca()

    print("=" * 60)
    print("   CENTRAL DE INFRAESTRUTURA MINDCORE ACTIVATED")
    print("=" * 60)
    print(f" Script Bash de Deploy estruturado:    '{f_deploy}'")
    print(f" Simulador de estresse em lote criado: '{f_lote}'")
    print(f" Manual Tecnico de Governanca gerado:  '{f_gov}'")
    print("-" * 60)
    print(" Todos os artefatos de consolidacao final foram criados.")
