[
    "autonomous agent",
    {
        "bounce_fees": {
            "base": 10000
        },
        "init": "{
        $BOUNCE_FEE = 10000;
        $TYPICAL_FEE = 1000;
        $REIMBURSEMENT = $BOUNCE_FEE - $TYPICAL_FEE;
    }",
        "messages": {
            "cases": [
                {
                    "if": "{ trigger.data.owner }",
                    "init": "{
                    $owner = trigger.data.owner otherwise bounce("owner field is missing");
                    $period = trigger.data.period otherwise bounce("period field is missing");
                    $reference = sha256($owner || $period );
                    if (var[$reference]) bounce("pension plan already exists");
                }",
                    "messages": [
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{trigger.address}",
                                        "amount": "{$REIMBURSEMENT}"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            var[$reference] = 'requested';
                            var[$reference||'.owner'] = $owner;
                            var[$reference||'.period'] = $period;
                            response['reference'] = $reference;
                            response['status'] = var[$reference];
                            response['message'] = 'pension plan created';
                        }"
                        }
                    ]
                },
                {
                    "if": "{
                    $deposit = trigger.output[[asset = base]];
                    $deposit > $BOUNCE_FEE
                }",
                    "messages": [
                        {
                            "app": "state",
                            "state": "{
                            response['message'] = 'Added ' || $deposit || ' bytes to the private pension plan';
                        }"
                        }
                    ]
                },
                {
                    "if": "{ trigger.data.action AND trigger.data.action == 'withdraw' AND trigger.address == var[$owner] }",
                    "init": "{
                    $amount = trigger.data.amount otherwise balance[$owner];
                    if ($amount > balance[$owner]) bounce("Invalid withdrawal amount. Maximum balance is " || balance[$owner]);
                    if ($amount <= 0) bounce("Invalid withdrawal amount. Enter a number greater than zero.");
                }",
                    "messages": [
                        {
                            "app": "payment",
                            "payload": {
                                "outputs": [
                                    {
                                        "address": "{$owner}",
                                        "amount": "{$amount}"
                                    },
                                    {
                                        "address": "{$owner}",
                                        "amount": "{$REIMBURSEMENT}"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            var[$owner] -= $amount;
                        }"
                        }
                    ]
                },
                {
                    "init": "{
                    bounce("Enter a data field: owner, reference or action");
                }",
                    "messages": [
                        {
                            "app": "state",
                            "state": "{
                            response['usage'] = 'Enter a data field: owner, reference or action';
                        }"
                        }
                    ]
                }
            ]
        }
    }
]