use Modern::Perl;
use C4::Context;

use Koha::Items;

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

my $update_sth = $dbh->prepare(q{
    UPDATE statistics
    SET itemtype=?
    WHERE itemnumber=? AND itemtype IS NULL
});
my $ilevel_itypes = C4::Context->preference('item-level_itypes');

my $sth_itemnumbers = $dbh->prepare(q|
    SELECT DISTINCT itemnumber
    FROM statistics
    WHERE ( type = "return" OR type = "localuse" ) AND
        itemtype IS NULL
|);

my $sth_select_itemtypes = $dbh->prepare(q|
    SELECT i.itype, b.itemtype
    FROM
     ( SELECT itemnumber,biblionumber, itype
         FROM items
       UNION
       SELECT itemnumber,biblionumber, itype
         FROM deleteditems
     ) i
    LEFT JOIN
     ( SELECT biblionumber, itemtype
         FROM biblioitems
       UNION
       SELECT biblionumber, itemtype
         FROM deletedbiblioitems
     ) b
    ON (i.biblionumber=b.biblionumber)
    WHERE i.itemnumber = ?;
|);

$sth_itemnumbers->execute;
while ( my ( $itemnumber ) = $sth_itemnumbers->fetchrow_array ) {
    $sth_select_itemtypes->execute( $itemnumber );
    my ( $item_itype, $biblio_itype ) = $sth_select_itemtypes->fetchrow_array;
    my $effective_itemtype = $ilevel_itypes
                                ? $item_itype // $biblio_itype
                                : $biblio_itype;
    warn "item-level_itypes set but no itype defined for item ($itemnumber)"
        if $ilevel_itypes and !defined $item_itype;
    say "Set itemtype $effective_itemtype to item $itemnumber";
    $update_sth->execute( $effective_itemtype, $itemnumber );
}
