import base64
import os

import requests
import yaml

_OWNER = 'perimeter-81'
_GIT_TOKEN = os.getenv("GLOBAL_CICD_GIT_TOKEN")
default_val = os.getenv('DEFAULT_VAL', 'false')

headers: dict = {'Accept': 'application/vnd.github+json',
                 'Authorization': f'Bearer {_GIT_TOKEN}',
                 'X-GitHub-Api-Version': '2022-11-28'}


def get_repos(repo_name, file_path, ref=None):
    print(f"Get repos.yaml from: {file_path}")
    extra_args = ""
    if ref:
        extra_args = f"?ref={ref}"
    api_url = f"https://api.github.com/repos/{_OWNER}/{repo_name}/contents/{file_path}{extra_args}"
    response = requests.get(api_url, headers=headers)
    if response.status_code == 200:
        print(f"got 200 from github get file content {file_path}{extra_args}")
        try:
            file_content = response.json()["content"]
            decoded_content = base64.b64decode(file_content).decode("utf-8")
            repos_dict = yaml.safe_load(decoded_content)
        except Exception as e:
            print(f"failed to parse yaml file from github - {e}")
            exit(1)
        return repos_dict
    else:
        print(f"Error fetching the repos.yaml file: {response.status_code}, {response.text}")
        exit(1)


def check_type_of_repo_val(repos, repo_name):
    repo_val = repos[repo_name]
    if isinstance(repo_val, dict):
        return "dict"
    if isinstance(repo_val, list):
        return "list"
    print(f"repo val is not list and dict. is {type(repo_val)}")


repos = get_repos('devops-terraform-EKS', 'environments/p81/monitor/AWS/eu-west-1/kubernetes/release-app/repos.yaml')
current_repo = os.getenv('REPO_NAME')
only_repo_name = current_repo
if "/" in current_repo:
    split_repo = current_repo.split("/")
    only_repo_name = "/".join(split_repo[1:])


if only_repo_name not in repos:
    print(f"repo name: {only_repo_name} not in repos.yaml, set value of env.IS_MULTI_SERVICE_REPO to {default_val}")
    os.system(f'''echo "IS_MULTI_SERVICE_REPO={default_val}" >> $GITHUB_ENV''')
else:
    repo_val_type = check_type_of_repo_val(repos, only_repo_name)
    if repo_val_type == "dict":
        print(f"repo {only_repo_name} is mono service repo based on repos.yaml, set IS_MULTI_SERVICE_REPO to false")
        os.system(f'''echo "IS_MULTI_SERVICE_REPO=false" >> $GITHUB_ENV''')
    elif repo_val_type == "list":
        print(f"repo {only_repo_name} is multi service repo based on repos.yaml, set IS_MULTI_SERVICE_REPO to true")
        os.system(f'''echo "IS_MULTI_SERVICE_REPO=true" >> $GITHUB_ENV''')
    else:
        print(f"repo {only_repo_name} is not in repos.yaml, set IS_MULTI_SERVICE_REPO to {default_val} as default")
        os.system(f'''echo "IS_MULTI_SERVICE_REPO={default_val}" >> $GITHUB_ENV''')