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

use strict;
use warnings;

use lib '/app/tools/rps/lib';
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{serviceID})
	{
		$self->_propertiesFromDB(\%properties, $args{serviceID});
	}
	else
	{
		$self->_propertiesFromDefaults(\%properties);
	}

    $self->_initProperties(\%properties);

    return $self;
}

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

	my $dbItem = RPS::DB::Item::Service->Lookup(service_id => $serviceID);
	$self->_propertiesFromDBItem($hrProperties, $dbItem);
}

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

	$hrProperties->{service_id}     = $dbItem->service_id;
	$hrProperties->{service_name}   = $dbItem->service_name;
	$hrProperties->{service_name_clean} = $dbItem->service_name_clean;
	$hrProperties->{exclude_mechanicals} = $dbItem->exclude_mechanicals;
	$hrProperties->{exclude_ca_mechanicals} = $dbItem->exclude_ca_mechanicals;
}

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

	$self->{ServiceID} = Common::FormObject::Scalar->new(value => $props->{service_id}, readOnly => 1);
	$self->{ServiceName} = Common::FormObject::Scalar->new(value => $props->{service_name}, readOnly => 1);
	$self->{ServiceNameClean} = Common::FormObject::Scalar->new(value => $props->{service_name_clean}, readOnly => 1);
	$self->{ExcludeMechanicals} = Common::FormObject::Scalar::Boolean->new(value => $props->{exclude_mechanicals});
	$self->{ExcludeCAMechanicals} = Common::FormObject::Scalar::Boolean->new(value => $props->{exclude_ca_mechanicals});
}

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


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

	my $dbObj;
	if(defined $self->ServiceID())
	{
		$dbObj = RPS::DB::Item::Service->Lookup(service_id => $self->ServiceID());
	}
	else
	{
		$dbObj = RPS::DB::Item::Service->Create();
	}

	# set fields here
	#
	$dbObj->exclude_mechanicals($self->ExcludeMechanicals());
	$dbObj->exclude_ca_mechanicals($self->ExcludeCAMechanicals());

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

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


1;
