[
    "autonomous agent",
    {
        "bounce_fees": {
            "base": 10000
        },
        "init": "{
        // admin stuff
        $this = {
            name: "NUDGER", 
            use_case_1: "Propose a reward to receive a futur trigger (all request fields are optional)",
            use_case_2: "Get the reward by being the first to trigger in time with related tag",
            owner:"
O7NYCFUL5XIJTYE3O4MKGMGMTN6ATQAJ",  // to collect the dust when the aa is not in use.
        }; 
        $number_of_request = json_parse(var["number of request"] otherwise 0);
    }",
        "messages": {
            "cases": [
                {
                    "if": "{ !!trigger.data.nudge_with_tag }",
                    "init": "{ 
            $tag = trigger.data.nudge_with_tag;
            $nudge = json_parse(var[$tag] otherwise bounce ("Too late or wrong tag"));
            // validity tests
            if ($nudge.time > timestamp) bounce ("Too early, try at "||timestamp_to_string($nudge.time));
            if (!!$nudge.is_private and $nudge.is_private != trigger.address) bounce ("Private reward!");
            
            $late_nudge = timestamp > $nudge.deadline;
            $reward_destination = $late_nudge ? $nudge.requested_address : trigger.address;
            }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": {
                                "tag": "{$tag}"
                            }
                        },
                        {
                            "if": "{ $nudge.reward_asset != "base" }",
                            "app": "payment",
                            "payload": {
                                "asset": "{$nudge.reward_asset}",
                                "outputs": [
                                    {
                                        "address": "{ $reward_destination }",
                                        "amount": "{ $nudge.reward_amount }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $reward_destination }",
                                        "amount": "{ $nudge.reward_amount }"
                                    },
                                    {
                                        "if": "{ !$late_nudge }",
                                        "address": "{ $nudge.aa }",
                                        "amount": "{ 1 }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{ 
                        var[$tag] = false;   
                        var["number of request"] = $number_of_request -1;
                        response['message'] = $late_nudge ? "Too late, sorry !" : trigger.address||" has been rewarded ^^"; 
                    }"
                        }
                    ]
                },
                {
                    "if": "{ $number_of_request < 1 and trigger.address == $this.owner  }",
                    "messages": [
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $this.owner }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "messages": [
                        {
                            "app": "state",
                            "state": "{
                    $requested_time = trigger.data.requested_time otherwise timestamp;
                    $request = {
                        address: trigger.data.requested_address otherwise trigger.address,
                        time: $requested_time,
                        deadline: $requested_time + trigger.data.requested_acceptable_delay otherwise 10*24*60*60,
                        is_private: trigger.data.requested_nudger,
                        reward_amount: trigger.output[[asset!=base]].amount otherwise trigger.output[[asset=base]].amount-2000,
                        reward_asset: trigger.output[[asset!=base]].asset != "none"? trigger.output[[asset!=base]].asset: "base",
                    };
                    $request_tag = trigger.data.requested_tag otherwise sha256($request.address||$request.time); 
                    if (!!var[$request_tag]) bounce ("this tag already exist!");
                    var[$request_tag] = json_stringify($request);
                    var["number of request"] = $number_of_request + 1;
                    response['message'] = "Trigger-Request "||$request_tag||" created"; 
                }"
                        }
                    ]
                }
            ]
        }
    }
]