#!perl

# This is basically like 'withdraw', but for non-cash (e.g. iban)

my @TAB;

sub command :Tab(undeposit) ($self, $cart, $command, @) {
    $command eq 'undeposit' or return NEXT;

    warn "\n\n\n";
    warn "\e[1mNote: this function is for internal use by board members ONLY.\e[0m\n";
    warn "\n\n\n";
    warn "Enter 'abort' to abort.\n";

    @TAB = grep /^[-+]deposit/, RevBank::Users::names
        or return REJECT, "No contras available.";
    print "Available contras:\n", map "  $_\n", sort(@TAB);

    return "Contra", \&contra;
}

sub tab { @TAB }

sub contra :Tab(&tab) ($self, $cart, $arg, @) { 
    return REJECT, "Invalid contra." unless grep $_ eq $arg, @TAB;

    $self->{contra} = $arg;

    return "Amount to withdraw", \&amount;
}

sub amount($self, $cart, $arg, @) { 
    my $amount = parse_amount($arg);
    defined $amount or return REJECT, "Invalid amount";

    $cart
        ->add(-$amount, "Undeposit", { is_withdrawal => 1 })
        ->add_contra($self->{contra}, +$amount, "Undeposited by \$you");

    return ACCEPT;
}