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

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::Track;
use RPS::Track::TrackSimple;
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};
    my $productID  = $args{filterTrackList};
    my $simplified = $args{simplified};

    $self->{Track} = [];
    if ($albumID) {
        my $licenseType = $self->_licenseType();
        
        my $trackCollection;
        
        # If a product ID is passed (through the filterTrackList param), 
        # the list will only include the tracks that are included for that product.
        if ( $productID ) {
            $trackCollection = RPS::DB::Item::Track->GetIncludedTracksByProductID( $productID );
        } elsif ( $simplified ) {
            $trackCollection = RPS::DB::Item::Track->GetTrackIDsByAlbumID( $albumID );
        } else {
            $trackCollection = RPS::DB::Item::Track->GetTracksByAlbumIDFiltered( $albumID, $licenseType, %args );
        }

        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 $trackObj = $trackCollection->next();

            if ($simplified) {
                push @{ $self->{Track} }, $trackObj->track_id;
            } else {
                push @{ $self->{Track} }, $self->_getTrackXML( $trackObj, %args );
            }
        }
    }

    return $self;
}

sub _licenseType {

    # Overwrite this when necessary.
    return;
}

sub _getTrackXML {
    my ( $self, $trackDBObj, %args ) = @_;
    return RPS::Track::TrackSimple->new( _dbItem => $trackDBObj, %args );
}

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

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

    return $self->{Track};
}

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

    return $self->{Pagination};
}

1;
