import os

from actions_logging.app_logging import logger
from github.constants import OWNER
from github.env import get_required_env_var, halt_or_continue_on_error
from github.github_apis import get_changed_files


def get_changed_dirs(full_repo_name: str, pr_number: str, excluded_dirs: list = ['scripts/']) -> set[str]:
    try:
        """
        Based on the PR id, get list of changed yarkon dirs
        """
        pr_files = get_changed_files(full_repo_name=full_repo_name, pr_number=pr_number)
        logger.info(f"Geting files from PR {pr_number} : {pr_files}")
        lib_set = set()
        for file_details in pr_files:
            name = file_details['filename']
            folder_name = '/'.join(name.split('/')[:-1])
            for dir in excluded_dirs:
                logger.debug(f'excluding dir from folder name: {dir}')
                folder_name = folder_name.replace(dir, "")
                logger.debug(f'folder name after excluding dir: {folder_name}')
            if not folder_name:
                if '.' in excluded_dirs:
                    folder_name = ""
                else:
                    folder_name = "."

            if folder_name.__contains__('scripts'):
                logger.info(f'skipping folder name: {folder_name} (scripts)')
            else:
                lib_set.add(folder_name)
        return lib_set
    except Exception as e:
        halt_or_continue_on_error(
            f'ERROR. Exception: {e} occurred while fetching the list of files that belongs to PR {pr_number}')


def main():
    pr_number = get_required_env_var("PR_NUMBER")
    repo = os.getenv("REPO_NAME", f"{OWNER}/actions")
    if f"{OWNER}/" not in repo:
        repo = f"{OWNER}/{repo}"
    excluded_dirs = eval(os.getenv("EXCLUDED_DIRS", "['scripts/']"))
    dirs = list(get_changed_dirs(repo, pr_number, excluded_dirs))
    logger.info(dirs)
    # write_github_env(dirs, "CHANGED_DIRS")
    # this line here instead of the above line because of the quotes issue
    os.system(f"echo 'CHANGED_DIRS={dirs}' >> $GITHUB_ENV")



if __name__ == '__main__':
    main()
