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

use strict;
use warnings;
use Carp;
use Data::Dumper;

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

use lib '/app/tools/rps/lib';
use RPS::Product::BonusTrack;
use RPS::DB::Item::BonusTrack;
use RPS::DB::Item::Service;

use Common::FormObject;
use base 'Common::FormObject';

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



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

	$self->SUPER::_init(%args);
	my $productID = $args{productID};
	my $trackID = $args{trackID};

	# let's get all the services
	#
	my $servicesColl = RPS::DB::Item::Service->GetAll();
	my %serviceHash = ();
	while($servicesColl->hasNext())
	{
		my $dbItem = $servicesColl->next();
		$serviceHash{$dbItem->service_id} = { name => $dbItem->service_name, dbItem => RPS::Product::BonusTrack->new() };
	}


	# fill-in the bonus tracks that already exist
	#
	if($productID && $trackID)
	{
		my $bonusTracks = RPS::DB::Item::BonusTrack->GetByProductTrackID($productID, $trackID);
		if($bonusTracks->size)
		{
			while ($bonusTracks && $bonusTracks->hasNext())
			{
				my $dbItem = $bonusTracks->next();
				$serviceHash{$dbItem->service_id}{dbItem} = RPS::Product::BonusTrack->new(_dbItem => $dbItem);
			}
		}
		else
		{
			$self->skipXML(1);
		}
	}
	else
	{
		$self->skipXML(1);
	}

    $self->{BonusTrack} = [];
	foreach my $href (sort { lc($a->{name}) cmp lc($b->{name}) } values %serviceHash)
	{
		push @{$self->{BonusTrack}}, $href->{dbItem};
	}

	return $self;
}


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

	foreach my $bonusTrack (@{$self->{BonusTrack}})
	{
		$bonusTrack->save();
	}
}


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

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

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

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


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

	return $self->{BonusTrack};
}


###
1;#
###

