use strict;

use lib '/app/tools/common/lib';
use Common::RSApp;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::MechanicalStatementItem;
use RPS::DB::Item::MechanicalStatement;
use RPS::DB::Item::SaleMechanicalStatementItemMap;
use RPS::DB::Item::SaleRunMap;

my @clientIDs;
push @clientIDs, _getLocalClientIDs();

foreach my $clientID (@clientIDs) {
    next unless ($clientID);
    print $clientID. "\n";

    my $app = Common::RSApp->new( clientID => $clientID );

    _convert();
}

sub _convert {
    my $saleMapEntries = RPS::DB::Item::SaleMechanicalStatementItemMap->GetAll();

    while ( my $oldMapItem = $saleMapEntries->next() ) {
        my $item =
          RPS::DB::Item::MechanicalStatementItem->Lookup( mechanical_statement_item_id => $oldMapItem->mechanical_statement_item_id );
        if ($item) {
            my $statement = RPS::DB::Item::MechanicalStatement->Lookup( mechanical_statement_id => $item->mechanical_statement_item_id );
            if ($statement) {
                my $newMap = RPS::DB::Item::SaleRunMap->Create(
                    run_id            => $statement->mechanical_run_id,
                    run_type          => RPS::DB::Item::SaleRunMap::kRunTypeMechanical,
                    statement_item_id => $item->mechanical_statement_item_id,
                    status            => RPS::DB::Item::SaleRunMap::kStatusPaid,
                );
                $newMap->save();
            }
        }
    }
}

sub _getLocalClientIDs {

    # We have a nifty little script that will give us a list of client databases.
    #
    my $clientListString = `/app/tools/rps/bin/db/list_client_dbs.pl`;
    chomp $clientListString;

    # Find the client id that matches each database.
    #
    my @ids;
    my @dbNames = split( / /, $clientListString );
    foreach my $dbName (@dbNames) {
        my $id = Common::RSDB::DBNameToClientID($dbName);
        push @ids, $id;

    }

    #    return @ids;
    return 3;
}

