import os
import json
from actions_logging.app_logging import logger
from github.env import exit_on_error_and_write_summary, write_github_env, write_github_summary
from github.github_apis import get_git_all_tags
from calculate_version import get_version, Version


def manage(env_group: str, severity: str, repo_name: str, versions: str) -> str:
    tags = get_git_all_tags(repo_name, env_group)
    version_tags = [get_version(tag) for tag in tags]
    version: Version = max(version_tags)
    if not version:
        exit_on_error_and_write_summary(f"no version found for {env_group}")
    logger.info(severity)
    old_version = str(version)
    version.bump_one(severity)
    n_version = f"{version}-{env_group}"
    logger.info_green(f"new version for env_group: {n_version}")
    logger.info(f"old version: {old_version} new version: {n_version}")
    write_github_env(n_version, f"NEW_VERSION-{env_group}")
    write_github_env(str(version), f"NEW_VERSION_NO_DIR-{env_group}")
    write_github_summary(f":trophy: new version created: **{n_version}**")
    versions += n_version
    return versions


def main():
    _OWNER = 'perimeter-81/'
    sw = 'SW'
    prd = 'PRD'
    sw_level = ''
    prd_level = ''
    versions = ""
    repo_name = _OWNER + os.getenv("REPO_NAME")
    logger.info(f'repo name: {repo_name}')
    
    with open("env_vars_analysis.josn", 'r') as json_file:
        taf_level = json.load(json_file)

    if len(taf_level) == 1:
        group_level = taf_level[0]['group_level']
        level = taf_level[0]['level']
        if group_level == 'GLOBAL':
            logger.info(f"global level: {level} creating tag for both SW and PRD")
            sw_level = level
            prd_level = level
        elif group_level == 'SW':
            logger.info(f"SW level: {level} creating tag for SW")
            sw_level = level
        else:
            logger.info(f"PRD level: {level} creating tag for PRD")
            prd_level = level
    elif len(taf_level) == 2: # fix later
        if taf_level[0]['group_level'] == "SW":
            sw_level = taf_level[0]['level']
            prd_level = taf_level[1]['level']
            logger.info(f"creating tag for both SW and PRD")
        else:
            sw_level = taf_level[1]['level']
            prd_level = taf_level[0]['level']
    
    #os.system('git fetch --tags')
    if sw_level:
        severity = sw_level
        logger.info(f"severity for {sw} severity is {severity}")
        versions = versions + manage(sw, sw_level, repo_name, versions)
        if prd_level:
            versions += ","
    if prd_level:
        severity = prd_level
        logger.info(f"severity for {prd} severity is {severity}")
        versions = manage(prd, prd_level, repo_name, versions)
    logger.info(f"versions: {versions}")
    write_github_env(versions, "VERSIONS")


if __name__ == "__main__":
    main()