"""
Validacao das versoes dos sistemas Docker antes da implantacao.

Executado no inicio da instalacao/atualizacao para falhar cedo, antes de
qualquer container ser derrubado. Para cada sistema com `configurar: true`:

- resolve `master` na versao oficial mais recente do registro;
- valida que a imagem/tag configurada existe no registro;
- avalia o mapa de dependencias entre as versoes (mapa-dependencias.yaml).

Uso:

    python scriptsPython/validar_versoes_sistemas.py <arquivo-configuracao> <diretorio-scripts-implantacao>

Codigos de saida:

    0 = combinacao de versoes valida
    1 = ha versao inexistente, indefinida ou combinacao invalida
"""

import sys

from lib.echo import echo
from lib.obter_configuracoes import obter_configuracoes
from lib.sistemas_docker import SISTEMAS_DOCKER_POR_CHAVE
from lib.versoes_sistemas import validar_todos_os_sistemas

arquivo_configuracao = None if len(sys.argv) < 2 else sys.argv[1]
diretorio_scripts_implantacao = r'c:\microuniversoWeb\scriptsImplantacao' if len(sys.argv) < 3 else sys.argv[2]

configuracoes = obter_configuracoes(arquivo_configuracao)

if not configuracoes:
    echo(f"Falha ao carregar configuracoes do arquivo {arquivo_configuracao}", "error")
    exit(1)

versoes, erros = validar_todos_os_sistemas(configuracoes, diretorio_scripts_implantacao)

if versoes:
    echo("")
    echo("Versoes que serao implantadas:")

    for chave in sorted(versoes):
        echo(f"  {SISTEMAS_DOCKER_POR_CHAVE[chave].nome}: {versoes[chave]}")

    echo("")
else:
    echo("Nenhum sistema Docker esta habilitado nesta configuracao.")

if erros:
    quantidade = len(erros)
    resumo = (
        "1 problema encontrado nas versoes configuradas:"
        if quantidade == 1
        else f"{quantidade} problemas encontrados nas versoes configuradas:"
    )

    echo("")
    echo(resumo, "error")
    echo("")

    for indice, erro in enumerate(erros, start=1):
        echo(f"{indice}) {erro}", "error")
        echo("")

    echo("Implantacao interrompida. Nenhum container foi alterado.", "error")
    echo("Corrija os itens acima no arquivo de configuracao e execute novamente.", "error")
    exit(1)

echo("Versoes validadas com sucesso.")

exit(0)
