import boto3
from botocore.exceptions import ClientError
import time

# A script to create and retrieve a parameter in AWS Systems Manager Parameter Store
# using Boto3.

# --- Configuration ---
REGION = "us-east-1"
PARAMETER_NAME = "/my-boto3-app/config/database-url"
PARAMETER_VALUE = "jdbc:mysql://localhost:3306/mydb"
PARAMETER_DESCRIPTION = "Database connection URL for my Boto3 application"

ssm_client = boto3.client('ssm', region_name=REGION)

def create_ssm_parameter():
    """Creates a new Parameter Store parameter."""
    print(f"--- Creating Parameter Store parameter: {PARAMETER_NAME} ---")
    try:
        ssm_client.put_parameter(
            Name=PARAMETER_NAME,
            Value=PARAMETER_VALUE,
            Type='String',
            Description=PARAMETER_DESCRIPTION,
            Overwrite=True
        )
        print(f"Parameter '{PARAMETER_NAME}' created.")
    except ClientError as e:
        print(f"Error creating parameter: {e}")
        raise

def get_ssm_parameter():
    """Retrieves the value of the created parameter."""
    print(f"\n--- Getting parameter: {PARAMETER_NAME} ---")
    try:
        response = ssm_client.get_parameter(Name=PARAMETER_NAME)
        parameter_retrieved_value = response['Parameter']['Value']
        print(f"Retrieved parameter value: {parameter_retrieved_value}")
        return parameter_retrieved_value
    except ClientError as e:
        print(f"Error getting parameter: {e}")
        raise

def delete_ssm_parameter():
    """Deletes the Parameter Store parameter."""
    print(f"\n--- Deleting parameter: {PARAMETER_NAME} ---")
    try:
        ssm_client.delete_parameter(Name=PARAMETER_NAME)
        print("Parameter deleted.")
    except ClientError as e:
        if e.response['Error']['Code'] == 'ParameterNotFound':
            print(f"Parameter '{PARAMETER_NAME}' not found, skipping deletion.")
        else:
            print(f"Error deleting parameter: {e}")
            raise

def main():
    try:
        create_ssm_parameter()
        get_ssm_parameter()

        print("\n--- Systems Manager Parameter Store demonstration complete! ---")
        input("Press Enter to delete the parameter...")

    except ClientError as e:
        print(f"An AWS client error occurred: {e}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")
    finally:
        delete_ssm_parameter()
        print("\n--- Systems Manager Parameter Store demonstration and cleanup complete ---")

if __name__ == "__main__":
    main()
