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

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

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistRoyaltyStatement;
use RPS::Payee::ArtistPayee;

use base 'Common::FormObject';


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

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

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

    $self->_initProperties(\%properties);

    return $self;
}



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

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

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

    $hrProperties->{artist_royalty_statement_id}            = $dbItem->artist_royalty_statement_id;
    $hrProperties->{artist_royalty_run_id}                  = $dbItem->artist_royalty_run_id;
    $hrProperties->{payee_id}                               = $dbItem->payee_id;
    $hrProperties->{payor_id}                               = $dbItem->payor_id;
    $hrProperties->{cross_collateralized_previous_balance}  = $dbItem->cross_collateralized_previous_balance;
    $hrProperties->{cross_collateralized_income_subtotal}   = $dbItem->cross_collateralized_income_subtotal;
    $hrProperties->{cross_collateralized_expense_subtotal}  = $dbItem->cross_collateralized_expense_subtotal;
    $hrProperties->{cross_collateralized_subtotal}          = $dbItem->cross_collateralized_subtotal;
    $hrProperties->{previous_balance}                       = $dbItem->previous_balance;
    $hrProperties->{balance}                                = $dbItem->balance;
    $hrProperties->{min_payment}                            = $dbItem->min_payment;
    $hrProperties->{total}                                  = $dbItem->total;
#    $hrProperties->{subtotal}                               = $dbItem->subtotal;
    $hrProperties->{transaction_subtotal}                   = $dbItem->transaction_subtotal;
    $hrProperties->{amount_due}                             = $dbItem->amount_due;
    $hrProperties->{on_hold}                                = $dbItem->on_hold;
    $hrProperties->{license_income_subtotal}                = $dbItem->license_income_subtotal;
    $hrProperties->{contract_level_license_income_subtotal} = $dbItem->contract_level_license_income_subtotal;
    $hrProperties->{contract_level_license_income_total}    = $dbItem->contract_level_license_income_total;
    $hrProperties->{contract_level_license_income_previous_balance}    = $dbItem->contract_level_license_income_previous_balance;
    $hrProperties->{uncrossed_subtotal}                     = $dbItem->uncrossed_subtotal;
        
}


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

    $self->{ArtistRoyaltyStatementID}           = Common::FormObject::Scalar->new(value => $props->{artist_royalty_statement_id}, readOnly => 1);
    $self->{ArtistRoyaltyRunID}                 = Common::FormObject::Scalar->new(value => $props->{artist_royalty_run_id});
    $self->{PayeeID}                            = Common::FormObject::Scalar->new(value => $props->{payee_id});
    $self->{PayorID}                            = Common::FormObject::Scalar->new(value => $props->{payor_id});
    $self->{CrossCollateralizedPreviousBalance} = Common::FormObject::Scalar::Money->new(value => $props->{cross_collateralized_previous_balance});
    $self->{CrossCollateralizedIncomeSubTotal}  = Common::FormObject::Scalar::Money->new(value => $props->{cross_collateralized_income_subtotal});
    $self->{CrossCollateralizedExpenseSubTotal} = Common::FormObject::Scalar::Money->new(value => (-1 * $props->{cross_collateralized_expense_subtotal}));
    $self->{CrossCollateralizedSubTotal}        = Common::FormObject::Scalar::Money->new(value => $props->{cross_collateralized_subtotal});
    $self->{PreviousBalance}                    = Common::FormObject::Scalar::Money->new(value => $props->{previous_balance});
    $self->{Total}                              = Common::FormObject::Scalar::Money->new(value => $props->{total});
#    $self->{Subtotal}                           = Common::FormObject::Scalar::Money->new(value => $props->{subtotal});
    $self->{TransactionSubtotal}                = Common::FormObject::Scalar::Money->new(value => $props->{transaction_subtotal});
    $self->{Balance}                            = Common::FormObject::Scalar::Money->new(value => $props->{balance});
    $self->{MinPayment}                         = Common::FormObject::Scalar::Money->new(value => $props->{min_payment});
    $self->{AmountDue}                          = Common::FormObject::Scalar::Money->new(value => $props->{amount_due});
    $self->{OnHold}                             = Common::FormObject::Scalar::Boolean->new(value => $props->{on_hold}, readOnly => 1);
    $self->{LicenseIncomeSubtotal}              = Common::FormObject::Scalar::Money->new(value => $props->{license_income_subtotal});
    $self->{ContractLevelLicenseIncomeSubtotal} = Common::FormObject::Scalar::Money->new(value => $props->{contract_level_license_income_subtotal});
    $self->{ContractLevelLicenseIncomeTotal}    = Common::FormObject::Scalar::Money->new(value => $props->{contract_level_license_income_total});
    $self->{ContractLevelLicenseIncomePreviousBalance} = Common::FormObject::Scalar::Money->new(value => $props->{contract_level_license_income_previous_balance});

    $self->{ArtistPayee} = RPS::Payee::ArtistPayee->new(artistPayeeID => $props->{payee_id}, loadSubs => 0);

    if ( $props->{cross_collateralized_subtotal} < 0 )
    {
        $self->{UnrecoupedCrossedSubTotal} = Common::FormObject::Scalar::Money->new(value => $props->{cross_collateralized_subtotal});
        $self->{PayableCrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
    }
    elsif ( $props->{cross_collateralized_subtotal} > 0 )
    {
        $self->{PayableCrossedSubTotal} = Common::FormObject::Scalar::Money->new(value => $props->{cross_collateralized_subtotal});
        $self->{UnrecoupedCrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
    }
    else
    {
        $self->{UnrecoupedCrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
        $self->{PayableCrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
    }

    
    # Unlike the 'crossed' totals, we can have both a positive uncrossed subtotal AND some unrecouped negative uncrossed subtotals.
    # Alas, we don't record that stuff in the database.   But we can solve for it.
    #
    my $uncrossedRecouped = $props->{total};
    if ($props->{cross_collateralized_subtotal} > 0)
    {
        $uncrossedRecouped -= $props->{cross_collateralized_subtotal};
    }

    my $uncrossedUnrecouped = -1 * ($uncrossedRecouped - $props->{uncrossed_subtotal});
    $self->{UnrecoupedUncrossedSubTotal} = Common::FormObject::Scalar::Money->new(value => sprintf("%0.02f", $uncrossedUnrecouped));
    $self->{PayableUncrossedSubTotal} = Common::FormObject::Scalar::Money->new(value => sprintf("%0.02f", $uncrossedRecouped));

#    if ( $props->{uncrossed_subtotal} < 0 )
#    {
#        $self->{UnrecoupedUncrossedSubTotal} = Common::FormObject::Scalar::Money->new(value => $props->{uncrossed_subtotal});
#        $self->{PayableUncrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
#    }
#    elsif ( $props->{uncrossed_subtotal} > 0 )
#    {
#        $self->{PayableUncrossedSubTotal} = Common::FormObject::Scalar::Money->new(value => $props->{uncrossed_subtotal});
#        $self->{UnrecoupedUncrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
#    }
#    else
#    {
#        $self->{PayableUncrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
#        $self->{UnrecoupedUncrossedSubTotal} = Common::FormObject::Scalar::Money->new( value => 0.00 );
#    }
    
}


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

###
1;#
###
