"""Preparação das bases operacionais do Planejador Missão.

Entradas:
    Planilhas e CSVs em dados/: cadastro, catalogo de OIs, indisponibilidades,
    progresso, histórico, aeronaves, tripulantes disponíveis e rotas acionadas.

Saidas:
    Dicionario com DataFrames normalizados para geracao de colunas candidatas.

Papel no pipeline:
    Concentra a leitura e a preparacao antes do MILP, mantendo rastreavel quais
    arquivos alimentam cada execução.
"""

from __future__ import annotations

import importlib
from pathlib import Path

config = importlib.import_module("01_config")
io_utils = importlib.import_module("02_io_utils")


def carregar_bases(base_dir: Path = config.PROJECT_ROOT) -> dict:
    """Le e normaliza todas as bases necessarias ao planejamento diario."""
    io_utils.configurar_ambiente()
    io_utils.exigir_arquivos(config.ARQUIVOS_ENTRADA_OBRIGATORIOS)

    from src.planejador_missao.data_io import (
        carregar_aeronaves,
        carregar_cadastro,
        carregar_catalogo_ois,
        carregar_historico,
        carregar_indisponibilidades,
        carregar_parametros,
        carregar_progresso_ois,
        carregar_rotas,
        carregar_tripulantes_disponiveis,
    )
    from src.planejador_missao.rules import combinar_progresso_com_historico

    parametros = carregar_parametros(base_dir)
    historico = carregar_historico(base_dir)
    cadastro = carregar_cadastro(base_dir, historico)
    catalogo = carregar_catalogo_ois(base_dir)
    indisponibilidades = carregar_indisponibilidades(base_dir)
    progresso = combinar_progresso_com_historico(carregar_progresso_ois(base_dir), historico, catalogo)

    return {
        "parametros": parametros,
        "historico": historico,
        "cadastro": cadastro,
        "catalogo": catalogo,
        "indisponibilidades": indisponibilidades,
        "progresso": progresso,
        "aeronaves": carregar_aeronaves(base_dir),
        "disponiveis": carregar_tripulantes_disponiveis(base_dir),
        "rotas": carregar_rotas(base_dir),
    }


def main() -> None:
    """Executa uma leitura de diagnostico das bases."""
    logger = io_utils.configurar_logger("preparar_dados")
    bases = carregar_bases()
    logger.info("Tripulantes no cadastro: %s", len(bases["cadastro"]))
    logger.info("Tripulantes disponíveis: %s", len(bases["disponiveis"]))
    logger.info("Aeronaves informadas: %s", len(bases["aeronaves"]))
    logger.info("Rotas acionadas: %s", len(bases["rotas"]))


if __name__ == "__main__":
    main()
