"""Configuração central dos scripts do Planejador Missão.

Entradas:
    Estrutura padrão do projeto, com pastas dados/, src/ e resultados/.

Saídas:
    Constantes de caminho, parâmetros operacionais, nomes de arquivos e pesos
    usados pelos scripts de execução, validação e teste.

Papel no pipeline:
    Evita caminhos absolutos e concentra convencoes para que o projeto rode em
    qualquer computador mantendo a mesma estrutura de diretorios.
"""

from __future__ import annotations

from pathlib import Path


PROJECT_ROOT = Path(__file__).resolve().parents[1]
SCRIPTS_DIR = PROJECT_ROOT / "scripts"
SRC_DIR = PROJECT_ROOT / "src"
DADOS_DIR = PROJECT_ROOT / "dados"
RESULTADOS_DIR = PROJECT_ROOT / "resultados"
VALIDACAO_DIR = RESULTADOS_DIR / "validacao"
LOGS_DIR = PROJECT_ROOT / "logs"
TEMP_DIR = PROJECT_ROOT / "temp"

ARQUIVO_PARAMETROS = DADOS_DIR / "parametros_missao.csv"
ARQUIVO_CADASTRO_LOCAL = DADOS_DIR / "Modelagem_C98_ETA2_local.xlsx"
ARQUIVO_CADASTRO_ORIGINAL = DADOS_DIR / "Modelagem C98 ETA2.xlsx"
ARQUIVO_CATALOGO_OIS = DADOS_DIR / "catalogo_ois.xlsx"
ARQUIVO_INDISPONIBILIDADES = DADOS_DIR / "indisponibilidades_2026.xlsx"
ARQUIVO_HISTORICO = DADOS_DIR / "historico_horas_voadas.csv"
ARQUIVO_QUADRO_VOO_2025 = DADOS_DIR / "Quadro de Voo 2025 (2).xlsx"
ARQUIVO_VOOS_2025 = DADOS_DIR / "validacao" / "voos_2025.csv"

LOG_EXECUCAO = LOGS_DIR / "execucao.log"

AERONAVES = ["C98", "C97", "C95"]
META_HORAS_PADRAO = 50.0
VALIDACAO_TEMPO_LIMITE_SEGUNDOS = 180.0
VALIDACAO_GAP_RELATIVO = 0.05

PESOS_OBJETIVO = {
    "rota_acionada": 100000,
    "missao_local": 1000,
    "sobreaviso": 0,
    "meta_50": 100,
    "meta_110": 100,
    "beneficio_paop": 10,
    "custo_financeiro": -0.05,
}

ABAS = {
    "cadastro": "BANCO DE DADOS 2026",
    "catalogo_ois": "catalogo_ois",
    "voos_2025": "VOOS",
    "relatorio_diario": "ESCALA DIARIA",
}

ARQUIVOS_ENTRADA_OBRIGATORIOS = [
    ARQUIVO_CATALOGO_OIS,
    ARQUIVO_INDISPONIBILIDADES,
    ARQUIVO_PARAMETROS,
]


def garantir_diretorios() -> None:
    """Cria diretórios de saída e apoio usados pelos scripts."""
    for path in [RESULTADOS_DIR, VALIDACAO_DIR, LOGS_DIR, TEMP_DIR, ARQUIVO_VOOS_2025.parent]:
        path.mkdir(parents=True, exist_ok=True)
