#------------------------------------------------------------
# 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, loadSubs => 0 );

        # 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;    #
###

