# importing the requests library
import requests
import os

host = "git.sch.bme.hu"
personal_token = os.environ['PERSONAL_API_TOKEN']


def get_url(path) -> str:
    url = "https://"
    url += host
    url += "/api/v4/"
    url += path
    url += "?"
    url += "access_token=" + personal_token
    return url


def request(path):
    r = requests.get(url=get_url(path))
    return r.json()


def iterate_group(group_id: int):
    url = "groups/" + str(group_id)
    group = request(url)
    for project_meta in group['projects']:
        repo_action(project_meta)
    subgroups = request(url + "/subgroups")

    for subgroup in subgroups:
        iterate_group(str(subgroup['id']))


def repo_action(project_meta):
    # print(project_meta)
    setup_project(project_meta)
    add_youtrack(project_meta)
    add_mattermost(project_meta)
    check_tags(project_meta)


def update_project(project_meta, data, postfix=''):
    path = 'projects/' + str(project_meta['id']) + postfix
    r = requests.put(url=get_url(path), data=data)
    if r.ok:
        print("Updated: " + project_meta['name'])
    else:
        print("ERROR: " + project_meta['name'])


def setup_project(project_meta):
    data = {
        'merge_method': 'rebase_merge',

        'merge_requests_enabled': True,
        'lfs_enabled': True,
        'only_allow_merge_if_pipeline_succeeds': True,
        'only_allow_merge_if_all_discussions_are_resolved': True,
        'remove_source_branch_after_merge': True,

        'issues_enabled': False,
        'snippets_enabled': False,
        'wiki_enabled': False,
        'container_registry_enabled': False,
        'shared_runners_enabled': False,
        'auto_devops_enabled': False
    }
    update_project(project_meta, data)


def add_youtrack(project_meta):
    postfix = '/services/youtrack'
    yt = 'https://youtrack.kszk.bme.hu/'
    data = {
        'issues_url': yt + 'issue/:id',
        'project_url': yt + '/projects/9b25aaac-1002-4fbc-ab29-c4bc7ff365da',
        'description': 'KSZK YouTrack'
    }
    update_project(project_meta, data, postfix)


def add_mattermost(project_meta):
    postfix = '/services/mattermost'
    mm = 'https://mattermost.kszk.bme.hu/hooks'
    data = {
        'webhook': mm + '/c57a1tbduj8k9rsh71jd1gufey',
        'notify_only_broken_pipelines': True,
        'merge_requests_events': True,
        'tag_push_events': True
    }
    update_project(project_meta, data, postfix)


def check_tags(project_meta):
    path = 'projects/'
    path += str(project_meta['id'])
    path += '/protected_tags'
    tags = request(path)
    # unprotect_tags(path, tags)
    if len(tags) == 0:
        protect_tags(path)


def protect_tags(path):
    data = {
        'name': '1.*',
        'create_access_level': '40'
    }
    r = requests.post(url=get_url(path), data=data)
    if r.ok:
        print("Protected")
    else:
        print("ERROR protecting tag")


def unprotect_tags(path, tags):
    path += '/' + tags[0]['name']
    r = requests.delete(url=get_url(path))
    if r.ok:
        print("tag deleted")
    else:
        print("ERROR deleting tag")


iterate_group(1604)