import os
import yaml
from pathlib import Path
from actions_logging.app_logging import logger
from common.common import run_command
from github.env import get_required_env_var, exit_on_error_and_write_summary


def prepare_eb_config(eb_env_name: str, eb_app_name: str, aws_region: str, dd_api_key: str):
    """ Preparing elastic beanstalk config """
    logger.info("Preparing elasticbeanstalk environment config...")
    os.makedirs(".elasticbeanstalk", exist_ok=True)
    config_content = {
      "branch-defaults": {
          "master": {
              "environment": eb_env_name
          }
      },
      "global": {
          "application_name": eb_app_name,
          "default_region": aws_region,
          "sc": "git",
          "workspace_type": "Application"
      }
    }
    config_path = Path(".elasticbeanstalk/config.yml")
    try:
      with config_path.open("w") as f:
        yaml.dump(config_content, f, default_flow_style=False)
    except Exception as e:
      exit_on_error_and_write_summary(f"Unable to update {config_path}: {e}")
    
    logger.info("Preparing datadog config...")
    dd_config_path = ".ebextensions/datadog.config"
    try:
        if dd_api_key:
            with open(dd_config_path, "r") as f:
                content = f.read()
            content = content.replace("DATADOG_API_KEY", dd_api_key)
            with open(dd_config_path, "w") as f:
                f.write(content)
            logger.info("DATADOG API KEY has been injected into datadog.conf")
        else:
            logger.info("DATADOG API KEY environment variable is not set. Skipping replacement.")
    except Exception as e:
        exit_on_error_and_write_summary(f"Error updating datadog.conf: {e}")

def main():
    eb_env_name = get_required_env_var("EB_ENV_NAME")
    eb_app_name = get_required_env_var("SVC_NAME")
    aws_region = get_required_env_var('EB_REGION')
    dd_api_key = get_required_env_var('DATADOG_API_KEY')
    prepare_eb_config(eb_env_name, eb_app_name, aws_region, dd_api_key)
    run_command(f'eb use "{eb_env_name}"')

if __name__ == "__main__":
    main()