#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package BookPub::Matcher::Command::Match::Revenue;
use strict;
use warnings;

use lib '/app/tools/common/lib';
use RSApache::Response::XSLT;
use Common::Assert;

use lib '/app/tools/bookpub/lib';
use BookPub::Matcher::Sale::Revenue;
use BookPub::Tracker::File;
use BookPub::Price::Validator;

use base 'BookPub::Matcher::Command::Match';

sub cmd  { return "match"; }
sub area { return "matcher"; }

use constant kTemplate => '/app/tools/bookpub/templates/main/matcher.xsl';

sub _getSaleFromSaleID {
    my ( $self, $saleID ) = @_;
    return BookPub::Matcher::Sale::Revenue->new( saleID => $saleID );
}

sub _getFileFromFileID {
    my ( $self, $fileID ) = @_;
    return BookPub::Tracker::File->new( fileID => $fileID );
}

sub _handleFailure {
    my ( $self, $sale, $file, $pageParam ) = @_;

    $self->addMessageXML( type => 'error', code => 'match_failed' );
    return RSApache::Response::Redirect->new( "/bookpub/matcher?c=sale&file=" . $file->FileID() . "&trackerPage=$pageParam" );
}

sub _handleSuccess {
    my ( $self, $sale, $file, $pageParam ) = @_;

    $file->recalculateRemainingExceptions();
    $file->save();

    my $validator = new BookPub::Price::Validator( saleID => $sale->SaleID );
    $validator->run();

    # Need to re-initialize the Sale object to get the next ids.
    #
    my $nextSaleID = $sale->NextUnfixedID() || $sale->PreviousUnfixedID();
    if ($nextSaleID) {

        # redirect
        return RSApache::Response::Redirect->new( "/bookpub/" . $self->area() . "?c=sale&sale=$nextSaleID&trackerPage=$pageParam" );
    }

    return RSApache::Response::Redirect->new( "/bookpub/" . $self->area() . "?c=sale&file=" . $file->FileID() . "&trackerPage=$pageParam" );
}

1;
