import gitlab
import json
import os
import subprocess
from k8s_utils import initialize_helm, create_or_get_project

# ------------------------- get absolute paths -------------------------------------------------------------------------
source = os.path.dirname(__file__)
parent = os.path.abspath(source + '/../')

# ------------------------- load vars from file ------------------------------------------------------------------------
vars_file = open(parent + '/k8_git_settings.json')
settings_vars = json.load(vars_file)
vars_file.close()

website_url = settings_vars['site_info']['url']
website_safe = str(website_url).replace(".", "-")
custom_mailer = bool(settings_vars['site_info']['custom_mailer'])
standalone_mailer = bool(settings_vars['site_info']['standalone_mailer'])

# ------------------------- setup repo names ---------------------------------------------------------------------------
web_subgroup_name = website_safe + "-frontend"
mailer_repo_name = website_safe + "-mailer"
email_template_repo_name = website_safe + "-email-templates"
infra_repo_name = website_safe + "-infra"
helm_repo_name = website_safe + "-helm"
helm_chart_name = website_safe + "web"

# ------------------------- setup git vars -----------------------------------------------------------------------------
private_token = settings_vars['git_info']['private_token']
infra_path = settings_vars['git_info']['infra_path']
infra_master_gid = settings_vars['git_info']['infra_gid']
web_hosting_gid = settings_vars['git_info']['web_hosting_gid']

# ------------------------- setup gitlab -------------------------------------------------------------------------------
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)

web_hosting_group = gl.groups.get(id=web_hosting_gid)

# print(gl.namespaces.list())

# ------------------------- create web group ---------------------------------------------------------------------------
gl.groups.create({"name": web_subgroup_name, "path": website_url, "parent_id": web_hosting_gid})

web_hosting_subgroups = web_hosting_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']

# gl.groups.get({"name": website_url, "path": website_url, "parent_id": web_hosting_gid})

# ------------------------- create repos -------------------------------------------------------------------------------
web_repo = create_or_get_project(web_repo_name, subgroup_id)
# web_repo = gl.projects.create({"name": web_repo_name, "namespace_id": subgroup_id})
# web_repo = gl.projects.get({"name": web_repo_name, "namespace_id": subgroup_id})
# print("repo already exists, continuing...")
helm_repo = create_or_get_project(helm_repo_name, subgroup_id)
# helm_repo = gl.projects.create({"name": helm_repo_name, "namespace_id": subgroup_id})
infra_repo = create_or_get_project(infra_repo_name, subgroup_id)
# infra_repo = gl.projects.create({"name": infra_repo_name, "namespace_id": subgroup_id})

if custom_mailer:
    create_or_get_project(email_template_repo_name, subgroup_id)
    # gl.projects.create({"name": email_template_repo_name, "namespace_id": subgroup_id})

# ------------------------- clone helm repo ----------------------------------------------------------------------------
helm_url = helm_repo.ssh_url_to_repo
subprocess.call(['git', 'clone', helm_url])
# ------------------------- initialize chart ---------------------------------------------------------------------------
initialize_helm(helm_chart_name, helm_repo_name)
