import os
import sys
from actions_logging.app_logging import logger
from github.constants import ENV_VALUES_FOR_VALIDATE
from github.env import exit_on_error_and_write_summary
from aws.constants import CICD_NAMES
import yaml


def check_master_env_name(data):
    """
    master env name is for workflows thats runs master builds and not related to ant env
    """
    if data.get('env'):
        if data['env'].get('ENV_NAME'):
            if data['env']['ENV_NAME'] in CICD_NAMES:
                return True
    return False


def check_yaml_for_string(yaml_file):
    try:
        with open(yaml_file, 'r') as file:
            data = yaml.safe_load(file)    
        env_name = os.getenv('ENV_NAME') 
        logger.info(f"env_name:::{env_name}")
        if env_name == 'master':
            logger.info("env name is master. skipping")  ###what this for - ? 
            return True
        if not data.get("jobs"):
            exit_on_error_and_write_summary(f"workflow yaml file doesn't contain 'jobs' key")
        jobs = data["jobs"]
        for key in jobs:
            logger.info(f'{jobs[key].get("environment")}')
            if not jobs[key].get("environment"):
                exit_on_error_and_write_summary(f"job {key} doesn't contain 'environment' key")
            env_value = jobs[key]["environment"]
            if env_value not in ENV_VALUES_FOR_VALIDATE:
                exit_on_error_and_write_summary(f"in job {key} the value of 'environment' is not in {ENV_VALUES_FOR_VALIDATE}. NOT allowed. the value is {env_value} ")
        logger.info(f"for every job in the workflow the environment key set properly.")
        return True
    except FileNotFoundError:
        exit_on_error_and_write_summary(f"workflow file not found: {yaml_file}")
    except Exception as e:
        logger.error(f"An error occurred: {e}")
        logger.error(os.listdir("."))
        logger.error(os.listdir(".github"))
        exit_on_error_and_write_summary(f'probably failed on open the workflow file the error is: {e}')


def pars_workflow_ref(workflow_ref):
    """
        "workflow_ref": "perimeter-81/p81-m3-scripts/.github/workflows/create_dev_package_and_deploy.yaml@main
    """
    try:
        workflow_path = workflow_ref.split("@")[0]
        path_prefix = ".github/workflows/"
        split_path = workflow_path.split(path_prefix)
        file_name = split_path[-1]
        workflow_path = f"{path_prefix}{file_name}"
        return workflow_path
    except Exception as e:
        exit_on_error_and_write_summary(f"failed to parse workflow ref: {workflow_ref} the error is {e}")


def main():
    workflow_path = sys.argv[1].replace("workflow_path=", "", 1)
    workflow_ref = sys.argv[2].replace("workflow_ref=", "", 1)
    if not workflow_path:
        logger.warning(f"no workflow path in args. {workflow_path}")
        if not workflow_ref:
            exit_on_error_and_write_summary(f"no workflow ref: {workflow_ref}. or path in args. exiting")
        else:
            workflow_path = pars_workflow_ref(workflow_ref)

    check_yaml_for_string(workflow_path)


if __name__ == '__main__':
    main()
