#!/usr/bin/perl

use Modern::Perl;

use C4::Biblio;
use C4::Bookseller;
use C4::Acquisition;
use C4::Budgets;
use C4::Dates;
use C4::Context;

use YAML;

if ( $ARGV[0] eq "create" ) {
    create_data();
} elsif ( $ARGV[0] eq "delete" ) {
    delete_data();
} else {
    say "Please give a create or delete parameter";
    exit;
}

my $dbh = C4::Context->dbh();

sub create_data {
    my $bpid;
    my $budgetperiod;
    my $active_period;
    my $mod_status;
    my $del_status;
    my $budget_period_id = AddBudgetPeriod(
        {
            budget_period_startdate   => '2013-01-01',
            budget_period_enddate     => '2013-12-31',
            budget_period_description => "test_clone",
            budget_period_total       => 10_000,
            budget_period_active      => 1,
        }
    );

    my $budget_id1 = AddBudget(
        {
            budget_code      => 'budget_1',
            budget_name      => 'budget_1',
            budget_active    => 1,
            budget_period_id => $budget_period_id,
            budget_parent_id => undef,
            budget_amount    => 1_000,
        }
    );
    my $budget_id2 = AddBudget(
        {
            budget_code      => 'budget_2',
            budget_name      => 'budget_2',
            budget_active    => 1,
            budget_period_id => $budget_period_id,
            budget_parent_id => undef,
            budget_amount    => 2_000,
        }
    );
    my $budget_id11 = AddBudget(
        {
            budget_code      => 'budget_11',
            budget_name      => 'budget_11',
            budget_active    => 1,
            budget_period_id => $budget_period_id,
            budget_parent_id => $budget_id1,
            budget_amount    => 100,
        }
    );
    my $budget_id12 = AddBudget(
        {
            budget_code      => 'budget_12',
            budget_name      => 'budget_12',
            budget_active    => 1,
            budget_period_id => $budget_period_id,
            budget_parent_id => $budget_id1,
            budget_amount    => 100,
        }
    );
    my $budget_id111 = AddBudget(
        {
            budget_code      => 'budget_111',
            budget_name      => 'budget_111',
            budget_active    => 1,
            budget_period_id => $budget_period_id,
            budget_parent_id => $budget_id11,
            budget_amount    => 50,
        }
    );
    my $budget_id21 = AddBudget(
        {
            budget_code      => 'budget_21',
            budget_name      => 'budget_21',
            budget_active    => 1,
            budget_period_id => $budget_period_id,
            budget_parent_id => $budget_id2,
        }
    );

    my $booksellerid = C4::Bookseller::AddBookseller(
        {
            name         => "my_vendor_to_test_clone",
            address1     => "bookseller's address",
            phone        => "0123456",
            active       => 1,
            deliverytime => 5,
        }
    );

    my $basketno = C4::Acquisition::NewBasket( $booksellerid, 1, "my basket to test clone" );
    my $bib = MARC::Record->new();
    $bib->append_fields(
        MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
        MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'),
    );
    my ($biblionumber, $biblioitemnumber) = AddBiblio($bib, '');
    my $invoiceid = AddInvoice(invoicenumber => 'invoice_test_clone', booksellerid => $booksellerid, unknown => "unknown");
    my @order_infos = (
        {
            budget_id => $budget_id1,
            pending_quantity  => 1,
            ordered_quantity  => 0,
        },
        {
            budget_id => $budget_id2,
            pending_quantity  => 2,
            ordered_quantity  => 1,
        },
        {
            budget_id => $budget_id11,
            pending_quantity  => 3,
            ordered_quantity  => 4,
        },
        {
            budget_id => $budget_id12,
            pending_quantity  => 4,
            ordered_quantity  => 3,
        },
        {
            budget_id => $budget_id111,
            pending_quantity  => 2,
            ordered_quantity  => 1,
        },

        # No order for budget_21

    );

    my %budgets;
    for my $infos (@order_infos) {
        for ( 1 .. $infos->{pending_quantity} ) {
            my ( undef, $ordernumber ) = C4::Acquisition::NewOrder(
                {
                    basketno           => $basketno,
                    biblionumber       => $biblionumber,
                    budget_id          => $infos->{budget_id},
                    order_internalnote => "internal note",
                    order_vendornote   => "vendor note",
                    quantity           => 2,
                    cost               => 10,
                    rrp                => 10,
                    listprice          => 10,
                    ecost              => 10,
                    rrp                => 10,
                    discount           => 0,
                    uncertainprice     => 0,
                    gstrate            => 0,
                }
            );
            push @{ $budgets{$infos->{budget_id}} }, $ordernumber;
        }
        for ( 1 .. $infos->{ordered_quantity} ) {
            my ( undef, $ordernumber ) = C4::Acquisition::NewOrder(
                {
                    basketno           => $basketno,
                    biblionumber       => $biblionumber,
                    budget_id          => $infos->{budget_id},
                    order_internalnote => "internal note",
                    order_vendornote   => "vendor note",
                    quantity           => 2,
                    cost               => 10,
                    rrp                => 10,
                    listprice          => 10,
                    ecost              => 10,
                    rrp                => 10,
                    discount           => 0,
                    uncertainprice     => 0,
                    gstrate            => 0,
                }
            );
            ModReceiveOrder({
                  biblionumber     => $biblionumber,
                  ordernumber      => $ordernumber,
                  budget_id        => $infos->{budget_id},
                  quantityreceived => 2,
                  cost             => 10,
                  ecost            => 10,
                  invoiceid        => $invoiceid,
                  rrp              => 10,
                  received_items   => [],
            } );
        }
    }
}

sub delete_data {
    my @booksellers = C4::Bookseller::GetBookSeller( "my_vendor_to_test_clone" );
    for my $bookseller ( @booksellers ) {
        my $baskets = GetBasketsByBookseller( $bookseller->{id} );
        for my $basket ( @$baskets ) {
            DelBasket( $basket->{basketno} );
        }
        my $budget_periods = GetBudgetPeriods( {budget_period_description => 'test_clone'} );
        for my $budget_period ( @$budget_periods ) {
            my $budgets = GetBudgets( {budget_period_id => $budget_period->{budget_period_id} });
            for my $budget ( @$budgets ) {
                DelBudget( $budget->{budget_id} );
            }
            DelBudgetPeriod( $budget_period->{budget_period_id} );
        }
        C4::Bookseller::DelBookseller( $bookseller->{id} );
    }
}
