"""Geração das colunas candidatas viáveis.

Entradas:
    Bases preparadas por 03_preparar_dados.py.

Saidas:
    DataFrame em que cada linha representa uma escala possível: rota acionada,
    missão local ou sobreaviso, com dupla, aeronave, score, custo e metadados.

Papel no pipeline:
    Materializa o espaco de decisoes do MILP. A compatibilidade de aeronave,
    indisponibilidade, qualificacao e regra de instrucao ja sao filtradas aqui.
"""

from __future__ import annotations

import importlib

preparar = importlib.import_module("03_preparar_dados")
io_utils = importlib.import_module("02_io_utils")


def gerar_colunas_do_dia(bases: dict):
    """Gera colunas candidatas para a data e parâmetros informados nas bases."""
    from src.planejador_missao.candidates import gerar_colunas

    parametros = bases["parametros"]
    # Cada coluna candidata equivale a uma variável x_j do MILP.
    # As regras de dupla, qualificacao, instrucao e indisponibilidade sao
    # aplicadas antes do solver para reduzir o modelo a alternativas viáveis.
    return gerar_colunas(
        parametros["data_planejamento"],
        bases["rotas"],
        bases["aeronaves"],
        bases["cadastro"],
        bases["indisponibilidades"],
        bases["progresso"],
        bases["catalogo"],
        bases["disponiveis"],
        parametros["criterio_missao"],
        parametros["criterio_sbv"],
    )


def main() -> None:
    """Executa diagnostico da geracao de colunas."""
    logger = io_utils.configurar_logger("gerar_colunas")
    bases = preparar.carregar_bases()
    colunas = gerar_colunas_do_dia(bases)
    logger.info("Colunas candidatas geradas: %s", len(colunas))
    if colunas.empty:
        logger.warning("Nenhuma coluna candidata viavel foi gerada.")


if __name__ == "__main__":
    main()
