#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#---------------------------------------------------------------
package BookPub::RDAS::Form::BestSellerList::BestSellerListBook;

use strict;
use warnings;

use Carp;

use lib '/app/tools/common/lib';
use lib '/app/tools/bookpub/lib';

use BookPub::DB::Item::BestSellerListMonitorItem;
use Common::RSApp;
use Common::Util;
use Common::Assert;
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{bestSellerListMonitorItemID})
	{
		$self->_propertiesFromDB(\%properties, $args{bestSellerListMonitorItemID});
	}
	elsif ($args{serviceID}})
	{
		$self->{_serviceID} = $args{serviceID};

        $self->_propertiesFromServiceID(\%properties, $args{serviceID}, $args{productID});
	}
    else
	{
		$self->_propertiesFromDefaults(\%properties);
	}

    $self->_initProperties(\%properties);

    return $self;
}

sub _proertiesFromServiceID { die "Must be overloaded" }

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

	my $dbItem = BookPub::DB::Item::BestSellerListMonitorItem->Lookup(best_seller_list__monitor_item_id => $id);

	$self->_propertiesFromDBItem($hrProperties, $dbItem);
}


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

	$hrProperties->{best_seller_list_monitor_item_id} = $dbItem->best_seller_list_monitor_item_id;
	$hrProperties->{service_id}                       = $dbItem->service_id;
	$hrProperties->{title}                            = $dbItem->title;
	$hrProperties->{author}                           = $dbItem->author;
	$hrProperties->{imprint}                          = $dbItem->imprint;
	$hrProperties->{rank}                             = $dbItem->rank;
	$hrProperties->{isbn10}                           = $dbItem->isbn10;
	$hrProperties->{isbn13}                           = $dbItem->isbn13;
	$hrProperties->{related_isbn10}                   = $dbItem->related_isbn10;
	$hrProperties->{related_isbn13}                   = $dbItem->related_isbn13;
	$hrProperties->{date_created}                     = $dbItem->date_created;
}

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


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

    $self->{BestSellerListMonitorID} = $props->{best_seller_list_monitor_id};
	$self->{ServiceID}               = $props->{service_id};
	$self->{title}                   = $props->{title};
	$self->{author}                  = $props->{author};
	$self->{imprint}                 = $props->{imprint};
	$self->{rank}                    = $props->{rank};
	$self->{isbn10}                  = $props->{isbn10};
	$self->{isbn13}                  = $props->{isbn13};
	$self->{related_isbn10}          = $props->{related_isbn10};
	$self->{related_isbn13}          = $props->{related_isbn13};

}


sub _getDBItemClass { die "Must be overloaded" }


sub create {
    my $self = shift;
    my $data = shift || die "data required";
    my %args = @_;

    # Mark the previous current as old
	$self->invalidate( %args );

    my $pmItem = BookPub::DB::Item::ProductMonitorItem->Create(
        status     => 'current',
        type       => $self->_objectType(),
        product_id => $productID,
        service_id => $serviceID,
        last_verified => Common::DB::Item::kDateTimeNow,
    );
    $pmItem->save();

	return $pmItem->product_monitor_item_id;
}

sub invalidate {
    my $self = shift;
    my %args = @_;

    # Mark the previous current as old
    $self->_getDBItemClass()->InvalidateRecords();
}


###
1;#
###
