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

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::DB::Item::Album;
use RPS::DB::Item::Service;
use Common::FormObject;


use base 'Common::FormObject';


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

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

    my %properties;
	if ($args{_dbItem})
	{
		$self->_propertiesFromDBItem(\%properties, $args{_dbItem});
	}
	elsif ($args{bonusTrackID})
	{
		$self->_propertiesFromDB(\%properties, $args{bonusTrackID});
	}
	else
	{
		$self->_propertiesFromDefaults();
	}

    $self->_initProperties(\%properties);

    return $self;
}


sub _propertiesFromDB
{
	my ($self, $hrProperties, $bonusTrackID) = @_;

	my $dbItem = RPS::DB::Item::BonusTrack->Lookup(bonus_track_id => $bonusTrackID);
	return $self->_propertiesFromDBItem($hrProperties, $dbItem);
}

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

    $hrProperties->{bonus_track_id} = $dbItem->bonus_track_id;
    $hrProperties->{product_id}     = $dbItem->product_id;
    $hrProperties->{track_id}       = $dbItem->track_id;
    $hrProperties->{service_id}     = $dbItem->service_id;
    $hrProperties->{date_start}     = $dbItem->date_start;
    $hrProperties->{date_end}       = $dbItem->date_end;

	$self->{_inDB} = 1; # !!! Using an extra flag to denote that this was actually loaded from the db.
}


sub _initProperties
{
	my ($self, $props) = @_;

	$self->{BonusTrackID}   = Common::FormObject::Scalar->new(value => $props->{bonus_track_id}, readOnly => 1);
	$self->{ProductID}      = Common::FormObject::Scalar->new(value => $props->{product_id});
	$self->{TrackID}        = Common::FormObject::Scalar->new(value => $props->{track_id});
	$self->{ServiceID}      = Common::FormObject::Scalar->new(value => $props->{service_id});
	$self->{DateStart}      = Common::FormObject::Scalar::Date->new(value => $props->{date_start});
	$self->{DateEnd}        = Common::FormObject::Scalar::Date->new(value => $props->{date_end});
	
	if ($props->{service_id})
	{
    	my $service = RPS::DB::Item::Service->Lookup(service_id => $props->{service_id});
    	my $serviceName = $service->service_name;
    	$self->{ServiceName}    = Common::FormObject::Scalar->new(value => $serviceName);
    }

}


sub _propertiesFromDefaults
{
	my ($self, $hrProperties) = @_;

	$self->{_inDB} = 0; # !!! Using an extra flag to denote that this was actually loaded from the db.

	return $self;
}


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

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

	if(! $self->ProductID())
	{
		$self->{ProductID}->setError(Common::FormObject::kErrFieldBlank);
		$valid = 0;
	}

	if(! $self->TrackID())
	{
		$self->{TrackID}->setError(Common::FormObject::kErrFieldBlank);
		$valid = 0;
	}

	if(! $self->ServiceID())
	{
		$self->{ServiceID}->setError(Common::FormObject::kErrFieldBlank);
		$valid = 0;
	}

	return $valid;
}

sub save
{
    
    # We will be deleting all of the existing bonus tracks before we get to this point.
    #
    
	my ($self) = @_;
	
    my $dbItem = RPS::DB::Item::BonusTrack->Create();
    
	$dbItem->product_id($self->ProductID());
	$dbItem->track_id($self->TrackID());
	$dbItem->service_id($self->ServiceID());
	$dbItem->date_start($self->DateStart());
	$dbItem->date_end($self->DateEnd());

	$dbItem->save();
	$self->{_inDB} = 1;
}


###
1;#
###
