package RPS::ArtistPayee::Command::Delete;

use strict;
use warnings;

use RPS::Command;
use RPS::CommandLog;
use parent 'RPS::Command';

use lib '/app/tools/common/lib';
use Common::FormObject;
use RSApache::Response::XML;
use RSApache::Response::XSLT;
use RSApache::Response::Redirect;

use RPS::ArtistPayee::Command::Main;
use RPS::ArtistPayee::Command::Edit;
use RPS::DB::Item::ArtistPayee;


# this action is available only from the "Edit" form
sub cmd  { return 'delete'; }
sub area { return 'artist_payee'; }

use constant kTemplate => "/app/tools/rps/templates/artist_payee/index.xsl";

sub execute {
    my $self = shift;

    my $response = $self->SUPER::execute();
    return $response if $response;

    my $status;
    my $id = $self->getParam('ArtistPayeeID') || 0;
    if ( $id && $id =~ /^\d+$/) {
        if ( $self->_isArtistPayee($id) ) {
            # an artist payee has related items
            if ( $self->_hasArtistPayeeItems($id) ) {
                return $self->_renderEditArtistPayeeForm( $id, Common::FormObject::kErrArtistPayeeHasItems );
            }
            # delete an artist payee
            if ( !$self->_deleteArtistPayee($id) ) {
                return $self->_renderEditArtistPayeeForm( $id, Common::FormObject::kErrDelete );
            }

            $status = 'success';
        }
    }

    return $self->_redirectToMainArtistPayeePage($status);
}

sub _renderEditArtistPayeeForm {
    my ($self, $id, $errorMessage) = @_;

    my $form = RPS::ArtistPayee::Form->new( artistPayeeID => $id );
    $form->setError($errorMessage);
    $self->addMessageXML( type => "error", code => $errorMessage );
    $self->{xml}{Form} = $form;

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

sub _redirectToMainArtistPayeePage {
    my ($self, $status) = @_;

    my %showParams;
    if ( $status && $status eq 'success' ) {
        my $msg = RPS::Message->new( type => "success", code => Common::FormObject::kSuccessDelete );
        %showParams = ( msg => $msg->toString() );
    }

    my $cmd = RPS::ArtistPayee::Command::Main->new(%showParams);
    return RSApache::Response::Redirect->new( $cmd->getRedirect() );
}

sub _hasArtistPayeeItems {
    my ($self, $id) = @_;
    return ( RPS::DB::Item::ArtistPayee->HasArtistContracts($id)     ||
             RPS::DB::Item::ArtistPayee->IsNotManual($id)     ||
             RPS::DB::Item::ArtistPayee->HasPendingTransactions($id) ||
             RPS::DB::Item::ArtistPayee->HasTransactionHistory($id)
    )
}

sub _isArtistPayee {
    my ($self, $id) = @_;
    return RPS::DB::Item::ArtistPayee->Lookup(artist_payee_id => $id);
}

sub _deleteArtistPayee {
    my ($self, $id) = @_;
    return RPS::DB::Item::ArtistPayee->DeleteArtistPayee($id);
}

1;
