from layercake.dateutils import now
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair


def update_policies(
    id: str,
    /,
    payment_policy: dict = {},
    billing_policy: dict = {},
    *,
    persistence_layer: DynamoDBPersistenceLayer,
):
    now_ = now()

    with persistence_layer.transact_writer() as transact:
        if payment_policy:
            transact.put(
                item={
                    'id': id,
                    'sk': 'metadata#payment_policy',
                    'create_date': now_,
                }
                | payment_policy
            )
        else:
            transact.delete(key=KeyPair(id, 'metadata#payment_policy'))

        if billing_policy:
            transact.put(
                item={
                    'id': id,
                    'sk': 'metadata#billing_policy',
                    'create_date': now_,
                }
                | billing_policy
            )
        else:
            transact.delete(key=KeyPair(id, 'metadata#billing_policy'))

    return True
