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

