#!/usr/bin/perl
use Modern::Perl;
use DateTime;
use MARC::Record;
use MARC::Field;

use C4::Biblio;
use C4::Branch;
use C4::Circulation;
use C4::Items;
use C4::Members;
use C4::Overdues;

my $dbh = C4::Context->dbh;
$dbh->{RaiseError} = 1;
#$dbh->{AutoCommit} = 0;

warn Data::Dumper::Dumper $dbh->selectall_arrayref(q|select count(*) from issues|, { Slice => {} });
my @categories = C4::Category->all;
my @branches = @{ C4::Branch::GetBranchesLoop() };

C4::Context->_new_userenv ('DUMMY_SESSION_ID');
C4::Context::set_userenv(0,0,0,'firstname','surname', $branches[int(rand($#branches))]->{branchcode}, 'Library 1', 0, '', '');

my @borrowernumbers;
for my $i ( 1 .. 100 ) {
    say "inserting borrower $i/100";
    my $categorycode = $categories[int(rand($#categories))]->{categorycode};
    my $branchcode = $branches[int(rand($#branches))]->{branchcode};

    my $borrowernumber = C4::Members::AddMember(
        cardnumber => qq|cardnumber_$i|,
        firstname => qq|firstname_$i|,
        surname => qq|surname_$i|,
        categorycode => $categorycode,
        branchcode => $branchcode,
        userid => qq|firstname_surname_$i|,
        email => qq|an_email_$i\@example.org|,
    );
    push @borrowernumbers, $borrowernumber;
}

my @itemnumbers;
my @barcodes;
for my $i ( 1 .. 100 ) {
    say "inserting biblio $i/100";
    my $biblio = MARC::Record->new();
    $biblio->append_fields(
        MARC::Field->new('200', ' ', ' ', a => qq|my_title_$i|),
    );

    my ($biblionumber, $biblioitemnumber) = AddBiblio($biblio, '');

    for my $j ( 1 .. 10 ) {
        my $barcode = qq|my_barcode_$i$j|;
        my ( undef, undef, $itemnumber ) = AddItem({
            homebranch => $branches[int(rand($#branches))]->{branchcode},
            holdingbranch => $branches[int(rand($#branches))]->{branchcode},
            barcode => $barcode
        }, $biblionumber );
        push @itemnumbers, $itemnumber;
        push @barcodes, $barcode;
    }
}

my $now = DateTime->now;
for my $i ( -30 .. 0 ) {
    say "inserting issue for day -30 < $i < 10";
    for my $j ( 1 .. 10 ) {
        my $borrowernumber = $borrowernumbers[int(rand($#borrowernumbers))];
        my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber );
        my $date_due = DateTime->now->add_duration( DateTime::Duration->new( hours => 24 * $i ) );
        my $barcode = $barcodes[int(rand($#barcodes))];
        say "add issue $borrowernumber, $barcode";
        AddIssue( $borrower, $barcode, $date_due );
    }
}
warn Data::Dumper::Dumper $dbh->selectall_arrayref(q|select count(*) from issues|, { Slice => {} });
