package RPS::Portal::Command::Main;
use strict;
use warnings;

use lib '/app/tools/common/lib';
use RSApache::Response::XSLT;
use RSApache::Response::Download;
use Common::DB::Item::PayeeType;
use Common::Assert;
use Common::Debug;
use Common::Client;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistPayee;
use RPS::DB::Item::ArtistPayeeStatementRecipient;
use RPS::DB::Item::Publisher;
use RPS::DB::Item::PublisherStatementRecipient;
use RPS::DB::Item::PortalEmailCustomText;
use RPS::Portal::SendInvite;

use base 'RPS::Command';

sub area { return "portal"; }
sub cmd  { return "main"; }

use constant kTemplate => '/app/tools/rps/templates/portal/main.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;

    $self->_getArtistPayeeData();
    $self->_getPublisherPayeeData();
    $self->_getPortslEmailCustomText();

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

sub _getArtistPayeeData {
    my $self = shift;

    my $oManualPayees = RPS::DB::Item::ArtistPayee->GetAllManual();
    my $oOnlinePayees = RPS::DB::Item::ArtistPayee->GetAllOnline();
    my $oInvited      = RPS::DB::Item::ArtistPayee->GetAllInvited();
    my $oConfirmed    = RPS::DB::Item::ArtistPayee->GetAllConfirmed();
    my $oRecipientsUnconfirmed = RPS::DB::Item::ArtistPayeeStatementRecipient->GetAllUnconfirmed();

    $self->{xml}{Artist}{PayeeStatus}{TotalManual}          = $oManualPayees->size;
    $self->{xml}{Artist}{PayeeStatus}{TotalOnline}          = $oOnlinePayees->size;
    $self->{xml}{Artist}{PayeeStatus}{InvitesSent}          = $oInvited->size;
    $self->{xml}{Artist}{PayeeStatus}{Unconfirmed}          = $oInvited->size - $oConfirmed->size;
    $self->{xml}{Artist}{PayeeStatus}{Confirmed}            = $oConfirmed->size;
    $self->{xml}{Artist}{PayeeRecipientStatus}{Unconfirmed} = $oRecipientsUnconfirmed->size;

    $self->{xml}{Artist}{OkToResendAll} = RPS::Portal::SendInvite->okToResendAll(
        Common::DB::Item::PayeeType::kPayeeTypeArtist,
        'payee'
    );
    $self->{xml}{Artist}{OkToResendRecipientsAll} = RPS::Portal::SendInvite->okToResendAll(
        Common::DB::Item::PayeeType::kPayeeTypeArtist,
        'recipient'
    );

    return 1;
}

sub _getPublisherPayeeData {
    my $self = shift;

    my $oManualPayees = RPS::DB::Item::Publisher->GetAllManual();
    my $oOnlinePayees = RPS::DB::Item::Publisher->GetAllOnline();
    my $oInvited      = RPS::DB::Item::Publisher->GetAllInvited();
    my $oConfirmed    = RPS::DB::Item::Publisher->GetAllConfirmed();
    my $oRecipientsUnconfirmed = RPS::DB::Item::PublisherStatementRecipient->GetAllUnconfirmed();

    $self->{xml}{Publisher}{PayeeStatus}{TotalManual}          = $oManualPayees->size;
    $self->{xml}{Publisher}{PayeeStatus}{TotalOnline}          = $oOnlinePayees->size;
    $self->{xml}{Publisher}{PayeeStatus}{InvitesSent}          = $oInvited->size;
    $self->{xml}{Publisher}{PayeeStatus}{Unconfirmed}          = $oInvited->size - $oConfirmed->size;
    $self->{xml}{Publisher}{PayeeStatus}{Confirmed}            = $oConfirmed->size;
    $self->{xml}{Publisher}{PayeeRecipientStatus}{Unconfirmed} = $oRecipientsUnconfirmed->size;

    $self->{xml}{Publisher}{OkToResendAll} = RPS::Portal::SendInvite->okToResendAll(
        Common::DB::Item::PayeeType::kPayeeTypePublisherUS,
        'payee'
    );
    $self->{xml}{Publisher}{OkToResendRecipientsAll} = RPS::Portal::SendInvite->okToResendAll(
        Common::DB::Item::PayeeType::kPayeeTypePublisherUS,
        'recipient'
);

    return 1;
}

sub _getPortslEmailCustomText{
    my $self = shift;

    my $customInviteText = RPS::DB::Item::PortalEmailCustomText->GetCustomInviteText();
    my $customNotificationText = RPS::DB::Item::PortalEmailCustomText->GetCustomNotificationText();

    $self->{xml}{PortalEmailCustomText}{InviteText} = $customInviteText;
    $self->{xml}{PortalEmailCustomText}{NotificationText} = $customNotificationText;

    return 1;
}


1;
