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

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::FormHash;
use base 'Common::FormHash';


sub _tagName
{
    return 'BonusTrack';
}


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

	my $productID = $args{productID};
	my $trackID = $args{trackID};

    if (!$productID || !$trackID)
    {
        return undef;
    }

    my $collection = RPS::DB::Item::BonusTrack->GetByProductTrackID($productID, $trackID);
    return $collection;
}


sub _keyMethodName
{
    return 'BonusTrackID';
}


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

    if($self->{_productID} && $self->{_trackID})
    {
        return RPS::Product::BonusTrack->new(productID => $self->{_productID}, trackID => $self->{_trackID});
    }
    
    return RPS::Product::BonusTrack->new();
}


sub _getObjectFromDBItem
{
    my ($self, $dbItem) = @_;

    return RPS::Product::BonusTrack->new(_dbItem => $dbItem);
}


sub _addObject
{
    my ($self, $object) = @_;

    $self->SUPER::_addObject($object);

    if ($self->{_dependency} && exists $self->{_dependency}{$object->BonusTrackID()})
    {
        $object->setDependency();
    }
}


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

	my $valid = 1;
    foreach my $bonusTrackID (keys %{$self->{BonusTrack}})
    {
        my $bonusTrack = $self->{BonusTrack}{$bonusTrackID};
		next if (!defined $bonusTrack);

        if (! $bonusTrack->validate())
        {
            $valid = 0;
        }
	}

	return $valid;
}


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

    # First, let's blow away all of the existing bonus tracks.
    # Then, we will add the ones we need back in.
    
    RPS::DB::Item::BonusTrack->DeleteByProductID( $args{productID} );
    
    my $keys = $self->getKeys();

    foreach my $bonusTrackID (@$keys)
    {
        my $bonusTrackObj = $self->{BonusTrack}{$bonusTrackID};
        
        if ($bonusTrackObj->_inDB() == 0)
        {
            $bonusTrackObj->save();
        }
    }
}



###
1;#
###

