"""Teste rápido de instalação do Planejador Missão.

Entradas:
    Ambiente Python atual, dependencias instaladas e arquivos em dados/.

Saídas:
    Diagnóstico amigável no terminal e log em logs/execucao.log.

Papel no pipeline:
    Permite verificar rapidamente se o computador está pronto para executar o
    planejador e o solver HiGHS/scipy.optimize.milp.
"""

from __future__ import annotations

import importlib
import sys

import numpy as np
from scipy.optimize import Bounds, LinearConstraint, milp

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


def testar_solver_minimo() -> None:
    """Resolve um MILP minimo para comprovar que scipy.optimize.milp funciona."""
    c = np.array([-1.0, -2.0])
    integrality = np.ones(2)
    bounds = Bounds([0, 0], [1, 1])
    constraints = [LinearConstraint([[1, 1]], -np.inf, 1)]
    result = milp(c=c, integrality=integrality, bounds=bounds, constraints=constraints)
    if not result.success:
        raise RuntimeError(f"Erro: teste minimo do solver falhou: {result.message}")


def main() -> None:
    """Executa todas as verificacoes de ambiente."""
    logger = io_utils.configurar_logger("teste_instalacao")
    print(f"Python encontrado: {sys.version.split()[0]}")

    for pacote in ["pandas", "numpy", "openpyxl", "scipy"]:
        importlib.import_module(pacote)
        print(f"Biblioteca OK: {pacote}")

    config.garantir_diretorios()
    for diretorio in [config.DADOS_DIR, config.RESULTADOS_DIR, config.SRC_DIR, config.LOGS_DIR, config.TEMP_DIR]:
        if not diretorio.exists():
            raise RuntimeError(f"Erro: diretorio obrigatorio ausente: {diretorio}")
        print(f"Diretorio OK: {diretorio.name}")

    cadastro = config.ARQUIVO_CADASTRO_LOCAL if config.ARQUIVO_CADASTRO_LOCAL.exists() else config.ARQUIVO_CADASTRO_ORIGINAL
    io_utils.exigir_arquivos([cadastro, *config.ARQUIVOS_ENTRADA_OBRIGATORIOS])
    print("Arquivos de entrada OK")

    testar_solver_minimo()
    print("Solver scipy.optimize.milp/HiGHS OK")
    logger.info("Teste de instalacao concluido com sucesso.")
    print("Ambiente OK para executar o Planejador Missão.")


if __name__ == "__main__":
    main()
