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

use strict;
use warnings;

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

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 (defined $args{regionID} && defined $args{countryCode})
	{
		$self->_propertiesFromDB(\%properties, $args{regionID}, $args{countryCode});
	}
	else
	{
		$self->_propertiesFromDefaults(\%properties);
	}

    $self->_initProperties(\%properties);

    return $self;
}


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

	my $dbItem = RPS::DB::Item::RegionCountryCode->Lookup(region_id => $regionID, country_code => $countryCode);
	$self->_propertiesFromDBItem($hrProperties, $dbItem);
}


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

	$self->{_inDB} = 1;
	$hrProperties->{region_id}      = $dbItem->region_id;
	$hrProperties->{country_code}   = $dbItem->country_code;
}


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

	$self->{RegionID} =     Common::FormObject::Scalar->new(value => $props->{region_id});
	$self->{CountryCode} =  Common::FormObject::Scalar::String->new(value => $props->{country_code});

    my $countryName;
    if ($props->{country_code})
    {
        $countryName = RPS::CountryList::CountryNameFor($props->{country_code});
    }

	$self->{CountryName} = Common::FormObject::Scalar::String->new(value => $countryName, readOnly => 0);

}

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

	$self->{_inDB} = 0;

}


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

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

	if(!$self->RegionID())
	{
		print STDERR "RegionID: not sure this should ever really happen\n";
		$self->{RegionID}->setError(Common::FormObject::kErrRequiredFields);
		$valid = 0;
	}

	if(!$self->CountryCode())
	{
		print STDERR "CountryCode: not sure this should ever really happen\n";
		$self->{CountryCode}->setError(Common::FormObject::kErrRequiredFields);
		$valid = 0;
	}

    return 1;
}


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

	# we never really update a country map item, so
	# we're either saving a new one or doing nothing.
	#
	if(!$self->{_inDB})
	{
		my $dbObj = RPS::DB::Item::RegionCountryMap->Create();

		# set fields here
		#
		$dbObj->region_id($self->RegionID());
		$dbObj->country_code($self->CountryCode());

		# save db item
		#
		$dbObj->save();
		$self->{_inDB} = 1;
	}
}


sub delete
{
	my $self = shift;

	# delete this region map
	#
	my $map = RPS::DB::Item::RegionCountryMap->Lookup(region_id => $self->RegionID(), country_code => $self->CountryCode());
	$map->delete() if($map);

	return 1;
}

###
1;#
###

