#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::Statement::Artist::StatementAlbum;

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

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

use lib '/app/tools/rps/lib';
use RPS::Statement::Artist::IncomeItemList;
use RPS::Statement::Artist::LicenseIncomeItemList;
use RPS::Statement::Artist::ExpenseItemList;
use RPS::DB::Item::ArtistRoyaltyAlbum;
use RPS::Catalog::AlbumSimple;
use RPS::DB::Item::NewArtistContract;

use Common::FormObject;
use base 'Common::FormObject';


sub _init
{
    my ($self, %args) = @_;
    my $timer = Common::Timer->new();

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

    $self->{_hfa} = $args{hfa};

    my %properties;
    if ($args{_dbItem})
    {
        $self->_propertiesFromDBItem(\%properties, $args{_dbItem});
    }
    elsif ($args{artistStatementAlbumID})
    {
        $self->_propertiesFromDB(\%properties, $args{artistStatementAlbumID});
    }
    else
    {
        $self->_propertiesFromDefaults(\%properties);
    }

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

    return $self;
}


sub _propertiesFromDB
{
    my ($self, $hrProperties, $id) = @_;
    my $timer = Common::Timer->new();

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


sub _propertiesFromDBItem
{
	my ($self, $hrProperties, $dbItem) = @_;
    my $timer = Common::Timer->new();

    $hrProperties->{artist_royalty_album_id}		= $dbItem->artist_royalty_album_id;
    $hrProperties->{artist_royalty_statement_id}	= $dbItem->artist_royalty_statement_id;
    $hrProperties->{album_id}                       = $dbItem->album_id;
    $hrProperties->{artist_contract_id}             = $dbItem->artist_contract_id;
    $hrProperties->{unit_level_income}              = $dbItem->unit_level_income;
    $hrProperties->{net_revenue_income}             = $dbItem->net_revenue_income;
    $hrProperties->{net_revenue_expenses}           = $dbItem->net_revenue_expenses;
    $hrProperties->{net_revenue_expenses_subtotal}  = $dbItem->net_revenue_expenses_subtotal;
#    $hrProperties->{net_revenue_total}              = $dbItem->net_revenue_total;
    $hrProperties->{recoupable_expenses}            = $dbItem->recoupable_expenses;
    $hrProperties->{total_income}                   = $dbItem->total_income;
    $hrProperties->{total_expenses}                 = $dbItem->total_expenses;
    $hrProperties->{previous_balance}               = $dbItem->previous_balance;
    $hrProperties->{license_income_subtotal}        = $dbItem->license_income_subtotal;
    $hrProperties->{total}                          = $dbItem->total;
    $hrProperties->{default_net_revenue_rate}       = $dbItem->default_net_revenue_rate;
    $hrProperties->{is_cross_collateralized}        = $dbItem->is_cross_collateralized;
}

sub _initProperties
{
    my ($self, $props) = @_;
    my $timer = Common::Timer->new();

    $self->{ArtistRoyaltyAlbumID}		= Common::FormObject::Scalar->new(value => $props->{artist_royalty_album_id}, readOnly => 1);
    $self->{ArtistRoyaltyStatementID}	= Common::FormObject::Scalar->new(value => $props->{artist_royalty_statement_id});
    $self->{AlbumID}					= Common::FormObject::Scalar->new(value => $props->{album_id});
    $self->{ArtistContractID}			= Common::FormObject::Scalar->new(value => $props->{artist_contract_id});
    $self->{UnitLevelIncome}			= Common::FormObject::Scalar::Money->new(value => $props->{unit_level_income});
    $self->{NetRevenueIncome}			= Common::FormObject::Scalar::Money->new(value => $props->{net_revenue_income});
    $self->{NetRevenueExpenses}			= Common::FormObject::Scalar::Money->new(value => (-1 * $props->{net_revenue_expenses}));
#    $self->{NetRevenueSubTotal}			= Common::FormObject::Scalar::Decimal->new(value => $props->{net_revenue_subtotal});
    $self->{NetRevenueExpensesSubTotal} = Common::FormObject::Scalar::Money->new(value => (-1 * $props->{net_revenue_expenses_subtotal}));
#    $self->{NetRevenueTotal}			= Common::FormObject::Scalar::Decimal->new(value => $props->{net_revenue_total});
    $self->{RecoupableExpenses}			= Common::FormObject::Scalar::Money->new(value => (-1 * $props->{recoupable_expenses}));
    $self->{TotalIncome}				= Common::FormObject::Scalar::Money->new(value => $props->{total_income});
    $self->{TotalExpenses}				= Common::FormObject::Scalar::Money->new(value => (-1 * $props->{total_expenses}));
    $self->{PreviousBalance}			= Common::FormObject::Scalar::Money->new(value => $props->{previous_balance});
    $self->{Total}						= Common::FormObject::Scalar::Money->new(value => $props->{total});
    $self->{DefaultNetRevenueRate}		= Common::FormObject::Scalar::Decimal->new(value => $props->{default_net_revenue_rate});
    $self->{IsCrossCollateralized}		= Common::FormObject::Scalar::Boolean->new(value => $props->{is_cross_collateralized});
    $self->{LicenseIncomeSubtotal}		= Common::FormObject::Scalar::Money->new(value => $props->{license_income_subtotal});

	my $contract = RPS::DB::Item::NewArtistContract->Lookup(artist_contract_id => $props->{artist_contract_id});
	$self->{ContractName} = Common::FormObject::Scalar::String->new(value => $contract->title) if($contract);
}


sub _initSubs
{
    my ($self, $props) = @_;
    my $timer = Common::Timer->new();

    # Need to get the album info in here, as well as the list of statement items.
    #

	if($self->loadSubs())
	{
        # We're going to want to have the album title at this level.
        # The other stuff, like album title and product code, will be the responsibility
        # of each individual statement item
        #
        my $albumID = $props->{album_id};
        $self->{Album} = RPS::Catalog::AlbumSimple->new(albumID => $albumID);

        # The income item list
        #
        $self->{IncomeItemList} = RPS::Statement::Artist::IncomeItemList->new
        (
            artistRoyaltyAlbumID => $props->{artist_royalty_album_id},
            albumID => $albumID,
        );

        # The license income item list
        #
        $self->{LicenseIncomeItemList} = RPS::Statement::Artist::LicenseIncomeItemList->new
        (
            artistRoyaltyStatementID => $props->{artist_royalty_statement_id},
            albumID => $albumID,
            artistContractID => $props->{artist_contract_id},
        );        
        

        # The expense item list
        #
        $self->{ExpenseItemList} = RPS::Statement::Artist::ExpenseItemList->new
        (
            artistRoyaltyAlbumID => $props->{artist_royalty_album_id},
            albumID => $albumID,
        );
	}

    return $self;
}


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

}


###
1;#
###



