#!perl

HELP "pfand" => "Pfand zurueck";

# This is a demo plugin. It's called "pfand" because "deposit" would be
# confusing and only the Germans are crazy enough to have deposits on small
# bottles anyway ;)

# The file format for 'revbank.pfand' is simply two whitespace separated
# columns: product id and pfand amount.

sub _read_pfand() {
    open my $fh, 'revbank.pfand' or die $!;
    return {
        map { split " " } grep /\S/, grep !/^\s*#/, readline $fh
    };
}

sub command :Tab(pfand) ($self, $cart, $command, @) {
    return NEXT if $command ne 'pfand';

    return "Pfand zurueck fuer", \&product;
}

sub product :Tab(&tab) ($self, $cart, $product, @) {
    my $pfand = parse_amount(_read_pfand->{ $product })
        or return REJECT, "Invalid pfand amount for $product";

    if ($pfand) {
        $cart
            ->add(+$pfand, "Pfand zurueck", { is_return => 1 })
            ->add_contra("-pfand", -$pfand, "Pfand fuer \$you");
    } else {
        say "$product: Kein Pfand";
    }
    return ACCEPT;
}

sub tab {
    return keys %{ _read_pfand() };
}

sub hook_add_entry ($class, $cart, $entry, @) {
    return if $entry->has_attribute('is_return');
    return if not $entry->has_attribute('product_id');

    my $pfand = _read_pfand->{ $entry->attribute('product_id') } or return;

    $cart
        ->add(-$pfand, "Pfand", { is_pfand => 1 })
        ->add_contra("-pfand", +$pfand, "Pfand von \$you");

    return;
}