import os
from actions_logging.app_logging import logger
from env_files.create_dot_env import create_dot_env_from_json
from env_files.constants import DEFAULT_ENV_FILES_PATH
from env_files.build_and_upload_dotenv import render_secret_id_and_load_secrets_to_env
from github.env import get_required_env_var, exit_on_error_and_write_summary
from env_files.handle_env_vars_changes import get_all_env_files_names


def render_dotenv(svc_name: str, is_multi_service_repo: bool, env_files_base_path: str = DEFAULT_ENV_FILES_PATH):
    if is_multi_service_repo:
        env_files_base_path = os.path.join(env_files_base_path, svc_name)

    logger.info_yellow(f"will try to create env files for files under {env_files_base_path}")
    all_env_files = get_all_env_files_names(env_files_base_path)

    svc_sm_path_suffix = ""

    for env_file in all_env_files:
        logger.info_yellow(f"Creating .env file for {env_file}")
        if is_multi_service_repo:  # multi service repo, will get the svc name from file path
            svc_sm_path_suffix = svc_name
        env_name = os.path.basename(env_file).split('.json')[0]
        render_secret_id_and_load_secrets_to_env(svc_name=svc_sm_path_suffix, env_name=env_name)
        create_dot_env_from_json(env_file, env_name, svc_name, is_multi_service_repo)
        logger.info_yellow(f"Created .env file for {env_name} in {svc_name}")
    logger.info_green(f"Finished creating a.env files for {svc_name} successfully")


def main():
    env_files_base_path = DEFAULT_ENV_FILES_PATH

    if not os.path.isdir(env_files_base_path):
        logger.warning(f"env files path {env_files_base_path} does not exist, stopping handle env vars changes")
        exit(0)

    is_multi_service_repo = os.getenv("IS_MULTI_SERVICE_REPO", 'false') == 'true'
    if os.getenv("SVC_TYPE", "") == "core-ecs":
        is_multi_service_repo = True

    svc_names = []
    if is_multi_service_repo:
        svc_names_str = os.getenv('SVC_NAMES')
        if svc_names_str:
            svc_names = svc_names_str.split(",")

    if not svc_names:
        svc_name = os.getenv('SVC_NAME')
        if svc_name:
            svc_names = [svc_name]

    if not svc_names:
        logger.warning("No service names provided, stopping handle env vars rendering")
        exit(0)

    for svc_name in svc_names:
        render_dotenv(svc_name, is_multi_service_repo)

    logger.info_green(f"Finished creating all .env files for {svc_names} successfully")


if __name__ == "__main__":
    main()