import getopt

from common import exit_message, get_version, is_semver
from docker import push_image
from go import BaseGolangCi


class GolangAppsCI(BaseGolangCi):
    def _parse_opts(self, argv):
        self._opts, self._args = getopt.getopt(argv, "vr:px")

    def exec_ci(self):
        for opt, arg in self._opts:
            if opt == "-v":
                self._validation()
            elif opt == "-r":
                self._release(arg)
            elif opt == "-p":
                self.publish()
            elif opt == "-x":
                self._run_sonar()
            else:
                exit_message("É preciso informar a opção referente a ação escolhida")

    def publish(self) -> None:
        """Publishes the image to docker"""

        project_version = self._get_version()

        self._compile()

        push_image(project_version)

    def _get_version(self):
        project_version = get_version()

        if not is_semver(project_version):
            project_version = self.get_version()

        return project_version
