"Get parameters from AWS SSM"
import argparse

import boto3


def fetch(
    environment,
    region_name="us-west-1",
    next_token=None,
    params=None,
    create_env_file=True,
):
    """
    Fetch parameters from AWS SSM by path and region. Recur until all parameters are retrieved.
    Input environment has to be development, staging or production
    """
    if environment not in ["development", "staging", "production"]:
        raise ValueError("Environment has to be development, staging or production")

    if params is None:
        params = {}

    ssm = boto3.client("ssm", region_name=region_name)
    parameter_path = f"/xcm/{environment}/env/"

    request_params = {"Path": parameter_path, "WithDecryption": True}

    if next_token:
        request_params["NextToken"] = next_token

    result = ssm.get_parameters_by_path(**request_params)
    new_params = {}

    for parameter in result["Parameters"]:
        name = parameter["Name"].replace(parameter_path, "")
        value = parameter["Value"].replace("\n", "\\n")
        new_params[name] = value

    params = params | new_params

    if "NextToken" in result:  # recur until all parameters are retrieved
        return fetch(
            environment=environment, next_token=result["NextToken"], params=params
        )

    if create_env_file:
        ## if on a local machine create a .env file
        with open(".env", "w", encoding="utf-8") as f:
            f.writelines([f"{k}='{v}'\n" for k, v in params.items()])

    return params


if __name__ == "__main__":
    # parser = argparse.ArgumentParser(description="Fetch AWS SSM Parameters")
    # parser.add_argument(
    #     "environment",
    #     choices=["development", "staging", "production"],
    #     help="Environment to fetch parameters for",
    #     default="development",
    # )
    # parser.add_argument(
    #     "--region", default="us-west-1", help="AWS region name (default: us-west-1)"
    # )
    # args = parser.parse_args()

    try:
        # print(
        #     f"Fetching parameters for environment: {args.environment} in region: {args.region}"
        # )
        parameters = fetch("development", region_name="us-west-1")
        print("Parameters successfully written to .env file")
    except Exception as e:
        print(f"Error: {e}")
