from lib.nomes_containers import (
    obter_nome_container_api_gateway,
    obter_nome_container_enterprise,
    obter_nome_container_microkafka,
    obter_nome_container_mu_whatsapp,
)


def deve_forcar_uso_rede_externa(configuracoes):
    return (
        configuracoes.get("acessos", {})
        .get("servidorLinux", {})
        .get("forcarUsoRedeExterna", False)
        is True
    )


def obter_host_porta_enterprise_para_api_gateway(configuracoes):
    backend_enterprise = [x for x in configuracoes["api-gateway"]["backends"] if x["nome"] == "ApiEnterprise"][0]
    enterprise_sendo_configurada = configuracoes["enterprise"]["configurar"]
    porta_enterprise_interna = str(
        configuracoes["enterprise"]["portaInterna"]
        if "portaInterna" in configuracoes["enterprise"]
        else 5000
    )

    if enterprise_sendo_configurada and not deve_forcar_uso_rede_externa(configuracoes):
        return obter_nome_container_enterprise(configuracoes), porta_enterprise_interna

    return backend_enterprise["host"], str(backend_enterprise["porta"])


def obter_host_porta_enterprise_para_proxy_https(configuracoes):
    porta_enterprise_interna = str(
        configuracoes["enterprise"]["portaInterna"]
        if "portaInterna" in configuracoes["enterprise"]
        else 5000
    )

    if configuracoes["enterprise"]["configurar"] and not deve_forcar_uso_rede_externa(configuracoes):
        return obter_nome_container_enterprise(configuracoes), porta_enterprise_interna

    return configuracoes["servicos"]["rest"]["hostEnterprise"], str(configuracoes["enterprise"]["porta"])


def obter_host_porta_mu_whatsapp_para_enterprise(configuracoes):
    porta_mu_whatsapp_externa = str(configuracoes["muWhatsapp"]["porta"])
    porta_mu_whatsapp_interna = str(
        configuracoes["muWhatsapp"]["portaInterna"]
        if "portaInterna" in configuracoes["muWhatsapp"]
        else 21465
    )

    if configuracoes["muWhatsapp"]["configurarApi"] and not deve_forcar_uso_rede_externa(configuracoes):
        return obter_nome_container_mu_whatsapp(configuracoes), porta_mu_whatsapp_interna

    return configuracoes["servicos"]["rest"]["hostEnterprise"], porta_mu_whatsapp_externa


def obter_host_microkafka_para_enterprise(configuracoes):
    if configuracoes["microkafka"]["configurar"] and not deve_forcar_uso_rede_externa(configuracoes):
        return obter_nome_container_microkafka(configuracoes)

    return configuracoes["enterprise"]["eventHandler"]["hostMicrokafka"]


def obter_url_api_gateway_para_pesquisa_produto(configuracoes):
    protocolo_api_gateway = "http"

    if configuracoes["api-gateway"]["configurar"] and not deve_forcar_uso_rede_externa(configuracoes):
        return f"{protocolo_api_gateway}://{obter_nome_container_api_gateway(configuracoes)}:80"

    host_apigateway = configuracoes["pesquisaProduto"]["api-gateway"]["host"]
    porta_apigateway = configuracoes["pesquisaProduto"]["api-gateway"]["porta"]
    return f"{protocolo_api_gateway}://{host_apigateway}:{porta_apigateway}"
