from __future__ import print_function
from crhelper import CfnResource
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# Initialise the helper, all inputs are optional, this example shows the defaults
helper = CfnResource(json_logging=False, log_level='DEBUG', boto_level='CRITICAL')

#import cfnresponse
import boto3
rds = boto3.client('rds')

@helper.create
def create(event, context):
    logger.info("Got Create")
    # Optionally return an ID that will be used for the resource PhysicalResourceId, 
    # if None is returned an ID will be generated. If a poll_create function is defined 
    # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId']
    #
    # To add response data update the helper.Data dict
    # If poll is enabled data is placed into poll event as event['CrHelperData']
    database_resource_id=None
    if 'DBClusterIdentifier' in event['ResourceProperties']:
        logger.info("cluster type")
        response = rds.describe_db_clusters(
                DBClusterIdentifier=event['ResourceProperties']['DBClusterIdentifier']
        )
        database_resource_id=response['DBClusters'][0]['DbClusterResourceId']
    else:
        logger.info("instance type")
        response = rds.describe_db_instances(
            DBInstanceIdentifier=event['ResourceProperties']['DatabaseInstanceId']
        )
        database_resource_id=response["DBInstances"][0]["DbiResourceId"]

    logger.info("DbiResourceId={}".format(database_resource_id))
    helper.Data.update({"DbiResourceId": database_resource_id})
    return None


@helper.update
def update(event, context):
    logger.info("Got Update")
    # If the update resulted in a new resource being created, return an id for the new resource. CloudFormation will send
    # a delete event with the old id when stack update completes


@helper.delete
def delete(event, context):
    logger.info("Got Delete")
    # Delete never returns anything. Should not fail if the underlying resources are already deleted. Desired state.


def lambda_handler(event, context):
    logger.info("DBI Custom Resource")
    helper(event, context)