from lib.obter_configuracoes import obter_configuracoes
import sys
from lib.echo import echo
from lib.executar_validacoes_servidor_linux import executar_validacoes_servidor_linux
from lib.ClienteLinux import obter_cliente_linux



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)
NOME_CONTAINER_CENTRAL_DE_CADASTROS = "central-de-cadastros"
NOME_CONTAINER_CENTRAL_DE_CADASTROS_LEGADO = "central-de-cadastros-legado"
PORTA_CENTRAL_DE_CADASTROS_PADRAO = configuracoes["centralDeCadastros"]["porta"]
PORTA_CENTRAL_DE_CADASTROS_LEGADO = "3000"
VERSAO_CENTRAL_DE_CADASTROS_LEGADO = "1.13.10"


def configurar_compose_central_de_cadastros(cliente_linux, caminho_compose, url_api_enterprise, url_api_rest, versao):
    cliente_linux.executar_comando(fr"sed -i 's,\$URL_API_ENTERPRISE,{url_api_enterprise},g' {caminho_compose}")
    cliente_linux.executar_comando(fr"sed -i 's,\$URL_API_REST,{url_api_rest},g' {caminho_compose}")
    cliente_linux.executar_comando(fr"sed -i 's,\$VERSAO,{versao},g' {caminho_compose}")


def configurar_porta_compose(cliente_linux, caminho_compose, porta):
    cliente_linux.executar_comando(fr"sed -i 's,{PORTA_CENTRAL_DE_CADASTROS_PADRAO}:80,{porta}:80,g' {caminho_compose}")


def configurar_container_legado(cliente_linux, caminho_compose):
    cliente_linux.executar_comando(
        fr"sed -i 's,container_name: {NOME_CONTAINER_CENTRAL_DE_CADASTROS},container_name: {NOME_CONTAINER_CENTRAL_DE_CADASTROS_LEGADO},g' {caminho_compose}"
    )




if not configuracoes["acessos"]["servidorLinux"]["configurar"]:
    echo("Dados do servidor linux nao informados. Central De Cadastros nao sera configurada")
    exit(0)

if not configuracoes["centralDeCadastros"]["configurar"]:
    echo("Configuracao da Central de Cadastros desativada via configuracao")
    exit(0)


mensagem_erro = executar_validacoes_servidor_linux(arquivo_configuracao, diretorio_scripts_implantacao)

if mensagem_erro:
    echo(mensagem_erro, "error")
    exit(1)

cliente_linux = obter_cliente_linux(arquivo_configuracao)

usuario = configuracoes["acessos"]["servidorLinux"]["usuario"]
diretorio_remoto_central_de_cadastros = f"/home/{usuario}/centralDeCadastros"
diretorio_remoto_central_de_cadastros_legado = f"/home/{usuario}/centralDeCadastrosLegado"
arquivo_compose_local = fr"{diretorio_scripts_implantacao}\centralDeCadastros\docker-compose-central-de-cadastros.yml"
arquivo_compose_remoto = f"{diretorio_remoto_central_de_cadastros}/docker-compose.yml"
arquivo_compose_remoto_legado = f"{diretorio_remoto_central_de_cadastros_legado}/docker-compose.yml"

cliente_linux.executar_comando(f"mkdir -p {diretorio_remoto_central_de_cadastros}")
cliente_linux.executar_comando(f"mkdir -p {diretorio_remoto_central_de_cadastros_legado}")
cliente_linux.executar_comando(f'mkdir -p /home/{usuario}/centralDeCadastros')

cliente_linux.copiar_arquivo(arquivo_compose_local, arquivo_compose_remoto)
cliente_linux.copiar_arquivo(arquivo_compose_local, arquivo_compose_remoto_legado)

url_api_enterprise = "{protocolo}://{host}:{porta}".format(
    protocolo="http" if configuracoes["centralDeCadastros"]["https"] == False else "https",
    host=configuracoes["centralDeCadastros"]["hostEnterprise"],
    porta="9988"
)

url_api_rest = "{protocolo}://{host}:{porta}".format(
    protocolo="http" if configuracoes["servicos"]["rest"]["configurarHttps"] == False else "https",
    host=configuracoes["enderecos"]["ipHost"],
    porta=configuracoes["servicos"]["rest"]["porta"] if configuracoes["servicos"]["rest"]["configurarHttps"] == False else configuracoes["servicos"]["rest"]["portaHttps"]
)

versao = configuracoes["centralDeCadastros"]["versao"]
porta = str(configuracoes["centralDeCadastros"]["porta"])
usuario_registro_docker = configuracoes["acessos"]["registroDocker"]["usuario"]
senha_registro_docker = configuracoes["acessos"]["registroDocker"]["senha"]

cliente_linux.executar_comando(
    fr"docker login gitlab.microuniverso.com.br:5050 -u {usuario_registro_docker} -p {senha_registro_docker}",
    disparar_excecao_se_retorno_nao_zero=False
)

configurar_compose_central_de_cadastros(
    cliente_linux,
    arquivo_compose_remoto,
    url_api_enterprise,
    url_api_rest,
    versao
)

if porta != PORTA_CENTRAL_DE_CADASTROS_PADRAO:
    configurar_porta_compose(cliente_linux, arquivo_compose_remoto, porta)

configurar_compose_central_de_cadastros(
    cliente_linux,
    arquivo_compose_remoto_legado,
    url_api_enterprise,
    url_api_rest,
    VERSAO_CENTRAL_DE_CADASTROS_LEGADO
)
configurar_porta_compose(cliente_linux, arquivo_compose_remoto_legado, PORTA_CENTRAL_DE_CADASTROS_LEGADO)
configurar_container_legado(cliente_linux, arquivo_compose_remoto_legado)

cliente_linux.executar_comando(f"docker compose -f {arquivo_compose_remoto} down")
cliente_linux.executar_comando(f"docker compose -f {arquivo_compose_remoto} pull")
cliente_linux.executar_comando(f"docker compose -f {arquivo_compose_remoto} up -d")

cliente_linux.executar_comando(f"docker compose -f {arquivo_compose_remoto_legado} down")
cliente_linux.executar_comando(f"docker compose -f {arquivo_compose_remoto_legado} pull")
cliente_linux.executar_comando(f"docker compose -f {arquivo_compose_remoto_legado} up -d")

exit(0)
