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

use strict;
use warnings;

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

use lib '/app/tools/distribution/lib';
use Distribution::DB::Item::DistributionService;
use Distribution::DB::Item::DistributionServiceClientAllowed;

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 = Distribution::DB::Item::DistributionService->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->{client_restricted}  = $dbItem->client_restricted;
	$hrProperties->{configured}         = $dbItem->{configured};
	$hrProperties->{status}             = $dbItem->{status};
}

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->{IsClientRestricted} = Common::FormObject::Scalar->new(value => $props->{client_restricted},);
	$self->{Configured}       = Common::FormObject::Scalar->new(value => $props->{configured}, readOnly => 1);
	$self->{Status}           = Common::FormObject::Scalar->new(value => $props->{status}, readOnly => 1);
	$self->{ClientAllowed}    = 1;

	if( $self->IsClientRestricted ) {
		my $client_id = Common::RSApp::GetClientID();
		my $record = Distribution::DB::Item::DistributionServiceClientAllowed->Lookup( client_id => $client_id, service_id => $self->ServiceID )
		    if( $client_id && $self->ServiceID );

    	$self->{ClientAllowed} = $record ? 1 : 0;
	}
}

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


sub addDistribution {
    my $self = shift;
	my $productID = shift;

    assert($productID);

    my $pd = Distribution::DB::Item::ProductDistribution->Search(
                 service_id => $self->ServiceID, product_id => $productID );

	return if( $pd );

	$pd = Distribution::DB::Item::ProductDistribution->Create();

	$pd->service_id( $self->ServiceID );
	$pd->product_id( $productID );

	$pd->save();
}

sub removeDistribution {
    my $self = shift;
	my $productID = shift;

    assert($productID);

	my $pd = Distribution::DB::Item::ProductDistribution->Search(
                 service_id => $self->ServiceID, product_id => $productID );

	return unless( $pd );

	$pd->delete();
}

1;
