"""Scripts for DotNet LIBS"""

from colorama import Fore

from common import exec_command, exit_message, get_env_variable_required, print_message
from dotnet import BaseDotNetCI


class DotNetLibsCI(BaseDotNetCI):
    def exec_ci(self):
        for opt, arg in self.opts:
            if opt == "-v":
                self.validation()
            elif opt == "-r":
                self._release_package(arg)
            elif opt == "-p":
                self._publish_package()
            elif opt == "-x":
                self.run_sonar()
            else:
                exit_message("É preciso informar a opção referente a ação escolhida")

    def compile(self, version):
        self.configure_nuget()

        print_message("Compilando projeto.")

        # Executa build
        exec_command(
            f"dotnet pack -c release -o output/ -p:version={version}",
            error_message="Compilação finalizada com erro.",
        )

        print_message("Compilação finalizada com sucesso.", Fore.GREEN)

    def _release_package(self, versioning_release):
        if versioning_release == "snapshot":
            version = self.get_version()

            self._publish_package(version)
        else:
            self.release(versioning_release)

    def _publish_package(self, version=None):
        if not version:
            version = self.get_version()

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

        self.compile(version)

        print_message("Publicando artefato no nexus")

        nexus_username = get_env_variable_required("NEXUS_USERNAME")
        nexus_password = get_env_variable_required("NEXUS_PASSWORD")
        nexus_nuget_api_key = get_env_variable_required("NEXUS_NUGET_API_KEY")

        repo_url = "https://nexus.senior.com.br/repository/nuget-hosted/"

        exec_command(
            f"dotnet nuget add source {repo_url} --name nexus "
            f"--username {nexus_username} --password {nexus_password} --store-password-in-clear-text"
        )

        exec_command(
            f"dotnet nuget push output/*.nupkg --api-key {nexus_nuget_api_key} --source {repo_url}",
            error_message="Falha ao publicar pacote.",
        )

        print(" ")
        print_message(
            f"Publicação da versão {version} realizada com sucesso.", Fore.GREEN
        )
