#------------------------------------------------------------
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::RoyaltyRun::RoyaltyRunStatusList;

use strict;
use warnings;
use Carp;

use lib '/app/tools/common/lib';
use Common::Assert;

use lib '/app/tools/rps/lib';
use RPS::RoyaltyRun::RoyaltyRunStatus::Artist;
use RPS::RoyaltyRun::RoyaltyRunStatus::Label;
use RPS::RoyaltyRun::RoyaltyRunStatus::CAMechanical;
use RPS::RoyaltyRun::RoyaltyRunStatus::UKMechanical;
use RPS::RoyaltyRun::RoyaltyRunStatus::USMechanical;

# use FormObject to get validation code
use base 'Common::FormObject';


# Container for all RoyaltyRun Status Reports

sub _init
{
    my $self = shift;
	my %args = @_;

	my %restrictToLists;

	# Only display lists specified, if none specified then list all.
	$restrictToLists{artist} = $args{artist} if( $args{artist} );
	$restrictToLists{label} = $args{label} if( $args{label} );
	$restrictToLists{caMechanical} = $args{caMechanical} if( $args{caMechanical} );
	$restrictToLists{ukMechanical} = $args{ukMechanical} if( $args{ukMechanical} );
	$restrictToLists{usMechanical} = $args{usMechanical} if( $args{usMechanical} );

    $self->{ArtistRuns}       = RPS::RoyaltyRun::RoyaltyRunStatus::Artist->new( %args )
	    if( ! %restrictToLists || $restrictToLists{artist} );
    $self->{LabelRuns}        = RPS::RoyaltyRun::RoyaltyRunStatus::Label->new( %args )
	    if( ! %restrictToLists || $restrictToLists{label} );
    $self->{CAMechanicalRuns} = RPS::RoyaltyRun::RoyaltyRunStatus::CAMechanical->new( %args )
	    if( ! %restrictToLists || $restrictToLists{caMechanical} );
    $self->{UKMechanicalRuns} = RPS::RoyaltyRun::RoyaltyRunStatus::UKMechanical->new( %args )
	    if( ! %restrictToLists || $restrictToLists{ukMechanical} );
    $self->{USMechanicalRuns} = RPS::RoyaltyRun::RoyaltyRunStatus::USMechanical->new( %args )
	    if( ! %restrictToLists || $restrictToLists{usMechanical} );

    $self->{CanEdit} = $self->canEdit();
    $self->{InvalidatedRuns} = $self->invalidRuns();
	return $self;
}

sub canEdit
{
	my $self = shift;

	for my $runType (qw( ArtistRuns LabelRuns CAMechanicalRuns UKMechanicalRuns USMechanicalRuns )) {
		if( $self->{$runType} ) {
			return 0 unless( $self->{$runType}->canEdit() );
		}
	}

	return 1;
}

sub invalidRuns
{
	my $self = shift;
	my $count = 0;

	for my $runType (qw( ArtistRuns LabelRuns CAMechanicalRuns UKMechanicalRuns USMechanicalRuns )) {
		$count += $self->{$runType}->Invalidated()
		    if( $self->{$runType} );
	}

	return $count;
}

1;
