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::SaleArtistRoyaltyRunMap;
use RPS::DB::Item::SaleRunMap;
use RPS::DB::Item::Product;
use RPS::DB::Item::Album;
use RPS::DB::Item::Track;
use RPS::DB::Item::PriceLevel;
use RPS::DB::Item::IncomeSource;
use RPS::DB::Item::ArtistRoyaltyRun;
use RPS::DB::Item::ArtistRoyaltyIncomeItem;
use RPS::ArtistRoyalty::Utils;

use lib '/app/tools/raptor/lib';
use Raptor::DB::Item::Sale;

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::SaleArtistRoyaltyRunMap->GetAll();

    while ( my $oldMapItem = $saleMapEntries->next() ) {

        # I can tie the sale to the run id.  Big whoop.
        # Better than nothing, of course, but can I also tie the sale to each line item?
        #
        my $newItem = RPS::DB::Item::SaleRunMap->Create(
            sale_id  => $oldMapItem->sale_id,
            run_id   => $oldMapItem->artist_royalty_run_id,
            run_type => RPS::DB::Item::SaleRunMap::kRunTypeArtistRoyalty,
            status   => RPS::DB::Item::SaleRunMap::kStatusPaid,
        );
        $newItem->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;
}
