#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::Track::TrackList;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::Track;
use RPS::DB::Item::User;
use RPS::Track::Track;
use RPS::Pagination;
use Common::FormObject;
use base 'Common::FormObject';

use Data::Dumper;

sub _init {
    my ( $self, %args ) = @_;

    $self->SUPER::_init(%args);

    my $albumID  = $args{albumID};
    my $page     = $args{page};
    my $pageSize = $args{pageSize};

    $self->{Track}                = [];
    $self->{MechanicalEligible}   = 0;
    $self->{CAMechanicalEligible} = 0;
    if ($albumID) {
        my $trackCollection = RPS::DB::Item::Track->GetTracksByAlbumID($albumID);

        if ( $page && $pageSize ) {
            $trackCollection->setPagination( pageIndex => $page, pageSize => $pageSize );

            $self->{Pagination} = RPS::Pagination->new(
                total     => $trackCollection->totalSize(),
                recordNum => $trackCollection->{_record},
                pageSize  => $pageSize
            );
        }

        while ( $trackCollection->hasNext() ) {
            my $oTrack = $trackCollection->next();
            push @{ $self->{Track} }, RPS::Track::Track->new( _dbItem => $oTrack, loadSubs => $self->loadSubs() );
            $self->{MechanicalEligible}++ unless $oTrack->mechanical_exempt;
            $self->{CAMechanicalEligible}++ unless $oTrack->ca_mechanical_exempt;
        }
    }

    return $self;
}

sub validate {
    my ( $self, @args ) = @_;

    my $valid = $self->SUPER::validate();

    # Iterate over any lists of objects I encompass.
    foreach my $oTrack ( @{ $self->{Track} } ) {
        next unless $oTrack;

        if ( 'RPS::Track::Track' eq ref ($oTrack) ) {
            $valid = 0 unless $oTrack->validate(@args);
        }
    }

    return $valid;
}

sub _listProperties {
    return { Track => 1 };
}

# This is the special sort of list accessor.
#
sub Track {
    my ( $self, $index, $methodAddressList, $newValue ) = @_;

    if ( 0 == scalar @$methodAddressList ) {
        if ( defined $newValue ) {
            $self->{Track}[$index] = $newValue;
        }
        return 1;
    }

    # May need to dynamically add objects to the list...
    #
    if ( !defined $self->{Track}[$index] ) {
        $self->{Track}[$index] = RPS::Track::Track->new();
    }

    return $self->{Track}[$index]->_accessProperty( $methodAddressList, $newValue );
}

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

    return $self->{Track};
}

1;
