import os

from colorama import Fore

from common import (
    exec_command,
    exit_message,
    get_env_variable_required,
    is_path_exist,
    print_message,
)
from common.artifactory_helpers import configure_go_repository
from go import BaseGolangCi
from src.interface.go_project import GoProjectInterface


class GoLib(GoProjectInterface):
    def validate(self):
        super().validate()
        if not is_path_exist("go.sum"):
            exit_message("O arquivo go.sum não foi encontrado")

    def package(self):
        configure_go_repository()

        module_name = self._get_module_name()
        version_to_publish = BaseGolangCi.get_version()

        print_message(f"Publicando versão {version_to_publish}")

        exec_command(
            f"JFROG_CLI_LOG_LEVEL=DEBUG jfrog rt gp {version_to_publish}",
            error_message="Falha ao publicar pacote.",
        )

        print(" ")
        print_message(
            f"Publicação da versão {version_to_publish} realizada com sucesso. "
            f"go get {module_name}@{version_to_publish}",
            Fore.GREEN,
        )

    @staticmethod
    def _get_module_name():
        """Extracts the module name from CI_PROJECT_URL env"""

        ci_project_url = get_env_variable_required("CI_PROJECT_URL")

        return ci_project_url.replace("https://", "").strip()
