import os
import json

import boto3
from botocore.exceptions import ClientError

_table = None
_table_name = os.environ.get('TABLE_NAME', 'ServerlessCdkDemo-ServerlessStack-ddb-table')


def get_client(service):
    return boto3.client(service)


def get_resource(service):
    return boto3.Session().resource(service)


def get_table(table_name: str):
    global _table
    if _table is None:
        dynamodb = get_resource('dynamodb')
        _table = dynamodb.Table(table_name)
    return _table


def get_list(table):
    try:
        response = table.scan()
        return response['Items']
    except ClientError as e:
        print('Error: ddb scan', e)
        return None


def create_response_body(books) -> str:
    if books is not None:
        body = {
            'status': 'success',
            'books': books
        }
    else:
        body = {
            'status': 'fail'
        }

    return json.dumps(body)


def handle(event, context):
    # print('event====>', json.dumps(event))

    table = get_table(_table_name)

    if event['httpMethod'] == 'GET':
        books = get_list(table)
        body_str = create_response_body(books)
        return {
            'statusCode': 200,
            'headers': {'Content-Type': 'application/json'},
            'body': body_str
        }