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

use Data::Dumper;
use lib '/app/tools/common/lib';
use lib '/app/tools/bookpub/lib';
use Common::Assert;
use Common::Log;

use BookPub::Tracker::File;
use BookPub::Tracker::File::Display;
use BookPub::Tracker::Command::Main;

use base 'BookPub::Command';

sub cmd      { return "finish"; }
sub area     { return "tracker"; }
sub pageName { return 'Revenue File Tracker'; }

use constant kTemplate => '/app/tools/bookpub/templates/tracker/finish.xsl';

sub execute {
    my ($self) = @_;

    # Give any inherited methods the first crack at this.
    # (This checks for login and basic access permissions).
    #
    my $response = $self->SUPER::execute();
    return $response if $response;

    my $fileID = $self->getParam('file');
    die "ERROR - no file id specified" unless defined $fileID;

    #    my $newCmd = BookPub::Tracker::Command::Main->new();

    my $file = BookPub::Tracker::File::Display->new( fileID => $fileID );
    $self->{xml}{File} = $file;

    # We have no business here if the file is closed...
    #
    die "ERROR - Cannot finish a closed file" if ( BookPub::DB::Item::File::STATUS_CLOSED == $file->FileStatus() );

    # If we need to enter in revenue, or get a conversion rate, redirect appropriately.
    #
    if ( !$file->Revenue ) {
        return RSApache::Response::Redirect->new( "/bookpub/tracker?file=$fileID&c=revenue&redirect=" . $self->getRedirect(1) );
    }

    if ( $file->CurrencyCode ne Common::Client::Current()->Locale()->currencyFormat()->currencyCode()
        && ( !$file->InputConversionRate || !$file->conversionRatesAreSet() ) ) {
        return RSApache::Response::Redirect->new( "/bookpub/tracker?file=$fileID&c=currency&redirect=" . $self->getRedirect(1) );
    }

    # Let's use an exception model here.
    # !!! For now we'll just return a generic error, but we can extend this
    # by using an Exception class.
    #
    my $submit = $self->getParam('submit');
    if ($submit) {
        eval { $self->{xml}{NewFile} = $file->finishImport(); };

        if ($@) {
            Common::Log::Print("BookPub::Tracker::Command::Finish - finishImport failed: $@");

            $self->addMessageXML( type => "error", code => "finish_failed" );
        } else {
            $self->addMessageXML( type => "success", code => "finish_complete" );
        }
    }

    $response = RSApache::Response::XSLT->new( $self->{xml}, kTemplate );
    return $response;
}

1;
