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

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

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

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistContractRegion;

use RPS::XMLObject;
use base 'RPS::XMLObject';


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

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

    my %properties;

    if($args{_dbItem})
    {   
        $self->_propertiesFromDBItem(\%properties, $args{_dbItem});
    }
    elsif($args{artistContractRegionID})
    {   
        $self->_propertiesFromDB(\%properties, $args{artistContractTermID});
    }
    else
    {   
        $self->_propertiesFromDefaults(\%properties, $args{contractID}, $args{contractMode});
    }

    $self->_initProperties(\%properties);
    $self->_initSubs(\%properties);

    return $self;
}


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

    my $dbItem = RPS::DB::Item::ArtistContractRegion->Lookup(artist_contract_region_id => $id);
    $self->_propertiesFromDBItem($hrProperties, $dbItem);
}


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

	$self->{_inDB} = 1;

    $hrProperties->{artist_contract_region_id} = $dbItem->artist_contract_region_id;
    $hrProperties->{artist_contract_id} = $dbItem->artist_contract_id;
    $hrProperties->{contract_mode} = $dbItem->contract_mode;
    $hrProperties->{region_id} = $dbItem->region_id;
    $hrProperties->{percent} = $dbItem->percent;
}


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

    $self->{ArtistContractRegionID}	= RPS::XMLObject::Scalar::Integer->new(value => $props->{artist_contract_region_id}, readOnly => 1);
    $self->{ArtistContractID}		= RPS::XMLObject::Scalar::Integer->new(value => $props->{artist_contract_id}, required => 1);
    $self->{ContractMode}			= RPS::XMLObject::Scalar::Integer->new(value => $props->{contract_mode}, required => 1);
    $self->{RegionID}				= RPS::XMLObject::Scalar::Integer->new(value => $props->{region_id}, required => 1);
    $self->{Percent}				= RPS::XMLObject::Scalar::Percent->new(value => $props->{percent}, required => 1);

	# this is how the template tells the backend to delete one of these.
	# the default is 'OFF' (ie. don't delete)
	#
	$self->{Delete} = RPS::XMLObject::Scalar->new();
}


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

	if($self->loadSubs())
	{
		if(defined $props->{region_id})
		{
			$self->{Region} = RPS::Region::Region->new(regionID => $props->{region_id}, loadSubs => 0);
		}
	}

}


sub _propertiesFromDefaults
{
    my ($self, $props, $contractID, $contractMode) = @_;
    
    $props->{artist_contract_id} = $contractID;
    $props->{contract_mode} = $contractMode;
}




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

    # If this guy is being deleted, we don't really care what values it has...
    #
    if ($self->Delete())
    {
        return 1;
    }

	my $valid = 1;

	# was something entered?
	#
	if(defined $self->Percent() || defined $self->RegionID())
	{
		$valid = $self->SUPER::validate();

		if($self->Percent() <= 0)
		{
			$self->{Percent}->setError(RPS::XMLObject::kErrFieldInvalid);
			$valid = 0;
		}
	}

	return $valid;
}

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

	if($self->Delete())
	{
		$self->delete();
		return;
	}

	my $dbObj;
	if($self->ArtistContractRegionID())
	{
		$dbObj = RPS::DB::Item::ArtistContractRegion->Lookup(artist_contract_region_id => $self->ArtistContractRegionID());
	}
	else
	{
		$dbObj = RPS::DB::Item::ArtistContractRegion->Create();
	}

	# set fields here
	#
	$dbObj->artist_contract_id($self->ArtistContractID());
	$dbObj->region_id($self->RegionID());
	$dbObj->contract_mode($self->ContractMode());
	$dbObj->percent($self->Percent());

	# save db item
	#
	$dbObj->save();

	# reload object
	#
	$self->_init(_dbItem => $dbObj);
}

sub delete
{
	my $self = shift;

	if($self->{_inDB})
	{
		my $myDBObj = RPS::DB::Item::ArtistContractRegion->Lookup(artist_contract_region_id => $self->ArtistContractRegionID());
		$myDBObj->delete();
		$self->{_inDB} = 0;
	}
}




###
1;#
###



