"""
🧠 neurotron_config.py
NFDOS — Núcleo de parâmetros vitais do Neurotron
------------------------------------------------
Este ficheiro centraliza todos os ajustes simbólicos e técnicos
do ciclo cognitivo do Neurotron.

Versão: 0.1 (Nascimento)
"""

from pathlib import Path

# ======================================
# 🌐 Diretórios e Caminhos
# ======================================

BASE_DIR = Path(__file__).resolve().parents[1]  # /opt/kernel/neurotron/
CORE_DIR = BASE_DIR / "neurotron_core"
LOG_DIR = Path("/var/log/neurotron")  # pode não existir ainda no rootfs
RUNTIME_DIR = Path("/var/run/neurotron")
MOUNT_POINT = "/var/neurotron"
DISK_CANDIDATES = ["/dev/vda", "/dev/vdb", "/dev/sda", "/dev/hda"]

# ======================================
# ⚙️ Parâmetros Cognitivos Principais
# ======================================

# Tempo entre ciclos cognitivos (em segundos)
NEUROTRON_TICK = 1.0

# Verbosidade dos logs (0 = silêncio, 1 = normal, 2 = debug)
NEUROTRON_VERBOSITY = 1

# Modo de operação
# - diagnostic: executa verificações de integridade
# - learning: ativa ciclos adaptativos (tree, etc.)
# - simulation: executa comportamento contínuo de observação
NEUROTRON_MODE = "diagnostic"

# Limite de homeostase (auto-regulação)
# Se CPU ou memória ultrapassarem este valor (%), o sistema reduz ritmo
NEUROTRON_HOMEOSTASIS = 85.0

HOMEOSTASIS_CPU_WARN = 70.0      # %
HOMEOSTASIS_CPU_ALERT = 85.0     # %
HOMEOSTASIS_MEM_WARN = 75.0      # %
HOMEOSTASIS_MEM_ALERT = 90.0     # %
HOMEOSTASIS_LOAD_WARN = 1.5      # média 1-min (ajuste ao teu core single/SMT)
HOMEOSTASIS_LOAD_ALERT = 3.0

NEUROTRON_DIAG_EVERY_TICKS = 5   # a cada N ciclos cognitivos, reavaliar sinais vitais
NEUROTRON_TICK_MIN = 0.5
NEUROTRON_TICK_MAX = 3.0
NEUROTRON_TICK_STEP = 0.25

# Entropia (seed) para gerar comportamentos pseudoaleatórios
NEUROTRON_SEED = 42

# Tamanho máximo da memória do Hipocampo (em KB)
NEUROTRON_MEMORY_SIZE = 256  # define quando o sistema começa a "esquecer"

# ======================================
# 🧩 Parâmetros de Subsistemas
# ======================================

# Cortex — núcleo de decisão
CORTEX_MAX_THREADS = 1          # threads de raciocínio simultâneo
CORTEX_LOOP_DELAY = 0.1         # tempo entre ciclos internos

# Hippocampus — memória
HIPPOCAMPUS_LOG_RETENTION = 100  # número máximo de logs guardados
HIPPOCAMPUS_AUTOSAVE = True      # ativa auto-gravação entre ciclos

# Motor — saída / ação
MOTOR_OUTPUT_DEVICE = "console"  # destino: console, log, cloud (futuro)
MOTOR_SHOW_SYMBOLS = True        # exibe símbolos (🧠, ⚙️, etc.)

# Perception — sensores
PERCEPTION_CPU_SOURCE = "/proc/stat"
PERCEPTION_MEM_SOURCE = "/proc/meminfo"
PERCEPTION_UPDATE_INTERVAL = 2.0  # segundos entre medições

# ======================================
# 🧠 Parâmetros Futuros (placeholders)
# ======================================

# Modo de expansão (para versões futuras)
# "none", "networked", "distributed"
NEUROTRON_EXPANSION_MODE = "none"

# Caminho do dataset local (para aprendizagem offline)
NEUROTRON_DATASET_PATH = BASE_DIR / "data"
NEUROTRON_HISTORY_KEEP = 8     # manter últimas N entradas no ficheiro

# Identificador de schema para upgrades
NEUROTRON_DIAG_SCHEMA = "v4"

# --- Telemetria e Heartbeat (V5) ---
HEARTBEAT_ENABLED = True          # Mostrar batimento a cada tick
HEARTBEAT_STYLE = "compact"       # "compact" ou "verbose"

# Limiares de microalertas (homeostase)
NEUROTRON_THRESHOLDS = {
    "cpu_high": 85.0,   # %
    "mem_high": 90.0,   # %
    "load1_high": 2.0,  # load avg(1min)
}

# Buffer de telemetria em memória e flush periódico
TELEMETRY_MAXLEN = 64
TELEMETRY_FLUSH_EVERY_TICKS = 5   # de tempos a tempos, gravar em JSON

# ======================================
# 🧭 Utilitário: impressão de parâmetros
# ======================================

def show_config():
    """Mostra a configuração atual do Neurotron"""
    import json
    cfg = {k: v for k, v in globals().items() if k.startswith("NEUROTRON_")}
    print(json.dumps(cfg, indent=2, default=str))

if __name__ == "__main__":
    show_config()
