import subprocess
import gitlab
import os
import json

source = os.path.dirname(__file__)
parent = os.path.abspath(source + '/../')

vars_file = open(parent + '/k8_git_settings.json')
settings_vars = json.load(vars_file)
vars_file.close()

private_token = settings_vars['git_info']['private_token']
web_hosting_gid = settings_vars['git_info']['web_hosting_gid']


gl = gitlab.Gitlab(url='https://git.alphatech-computing.com', private_token=private_token, api_version=4)
try:
    gl.auth()
except gitlab.exceptions.GitlabAuthenticationError as e:
    print("failed gitlab auth, is your access token present in k8_git_settings.json?")
    exit(1)


def create_or_get_project(repo_name, namespace_id):
    try:
        repo = gl.projects.create({"name": repo_name, "namespace_id": namespace_id})
    except gitlab.exceptions.GitlabCreateError:
        namespace = gl.namespaces.get(id=namespace_id)
        namespace_dict = namespace.asdict()
        print(namespace_dict)
        project_location = namespace_dict['full_path'] + "/" + repo_name
        print("location is " + project_location)
        repo = gl.projects.get(project_location)
    return repo

def create_or_get_subgroup(subgroup_name, path):
    try:
        subgroup = gl.groups.create({"name": subgroup_name, "path": website_url, "parent_id": web_hosting_gid})
        return subgroup
    except:
        parent_group = gl.groups.get(id=web_hosting_gid)

        web_hosting_subgroups = parent_group.subgroups.list()
        for subgroup in web_hosting_subgroups:
            subgroup_dict = subgroup.asdict()
            if subgroup_dict['name'] == website_url:
                created_subgroup_dict = subgroup_dict
            else:
                subgroup_dict = None
            # if subgroup
        subgroup_id = created_subgroup_dict['id']

def initialize_helm(helm_chart_name: str, helm_repo_name: str) -> None:
    # ------------------------- initialize chart -----------------------------------------------------------------------
    subprocess.Popen(['helm', 'create', helm_chart_name], cwd=helm_repo_name)
    # ------------------------- move files into root dir -00------------------------------------------------------------
    subprocess.Popen(['mv', helm_chart_name + '/*', '.'], cwd=helm_repo_name)
    subprocess.Popen(['rm', '-R', helm_chart_name], cwd=helm_repo_name)

    # psudo-code
    # helm create website_safe
    # mv website_safe/* .
    # rm -R website_safe
    # touch .gitignore
    # echo '.idea' > .gitignore
    return None
