import os
from actions_logging.app_logging import logger
from env_files.build_and_upload_dotenv import build_and_upload_dot_envs
from env_files.utils import get_sub_dir_for_env_file
from env_files.version_history import get_env_version_from_history
from env_files.constants import DEFAULT_ENV_FILES_PATH, GLOBAL_FILE, VERSION_HISTORY_FOLDER, VERSION_HISTORY_FILE
from github.env import get_required_env_var
from github.get_file_from_github import get_file_from_github


def rebuild_and_upload_dot_env(git_env_version: str,
                               svc_name: str,
                               env_name: str,
                               is_multi_service_repo: bool,
                               env_file_dir: str = DEFAULT_ENV_FILES_PATH,
                               version_history_folder: str = VERSION_HISTORY_FOLDER):
    logger.info_green(f"rebuilding and uploading {svc_name}.env file for {env_name} for version {git_env_version}")
    repo_name = get_required_env_var("GITHUB_REPOSITORY")
    env_level = get_sub_dir_for_env_file(env_name)
    if is_multi_service_repo:
        env_file_path = os.path.join(env_file_dir, svc_name, env_level, f"{env_name}.json")
        global_file_path = os.path.join(env_file_dir, svc_name, GLOBAL_FILE)
    else:
        env_file_path = os.path.join(env_file_dir, env_level, f"{env_name}.json")
        global_file_path = os.path.join(env_file_dir, GLOBAL_FILE)
    logger.info_green(f"fetching {env_file_path} from {git_env_version}")
    get_file_from_github(repo_name, env_file_path, os.path.dirname(env_file_path), git_env_version)
    logger.info_green(f"fetching {global_file_path} from {git_env_version}")
    get_file_from_github(repo_name, global_file_path, os.path.dirname(global_file_path), git_env_version)
    version_history_path = os.path.join(version_history_folder, env_name, VERSION_HISTORY_FILE)
    if is_multi_service_repo:
        version_history_path = os.path.join(version_history_folder, svc_name, env_name, VERSION_HISTORY_FILE)
    env_version = get_env_version_from_history(version_history_path, git_env_version)
    env_versions_data = {env_file_path: env_version}
    build_and_upload_dot_envs(env_versions_data, is_multi_service_repo)
    logger.info_green(f"finished rebuilding and uploading {svc_name}.env file for {env_name} for version {git_env_version}")
