#------------------------------------------------------------
# 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;
