#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# Copyright (C) 2008 RoyaltyShare, Inc.      All Rights Reserved
#---------------------------------------------------------------
package RPS::License::BaseCrossedLicenseAccount;

use Carp;
use strict;
use warnings;

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

use lib '/app/tools/rps/lib';
use RPS::Finance::Account;
use RPS::DB::Item::FinanceAccount;

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

sub _init {
    my ( $self, %args ) = @_;

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

    my %properties;

    $properties{ $self->_publisherID() } = $args{publisherID};
    $properties{track_id}                = $args{trackID};
    $properties{payor_id}                = $args{payorID};

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

    return $self;
}

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

    $self->{PublisherID} = Common::FormObject::Scalar->new( value => $props->{ $self->_publisherID() }, readOnly => 1 );
    $self->{TrackID}     = Common::FormObject::Scalar->new( value => $props->{track_id},                readOnly => 1 );
    $self->{PayorID}     = Common::FormObject::Scalar->new( value => $props->{payor_id},                readOnly => 1 );
}

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

    if ( $self->loadSubs() ) {
        my $crossedAccountMap = $self->_account()->Lookup(
            $self->_publisherID() => $props->{ $self->_publisherID() },
            payor_id              => $props->{payor_id},
            track_id              => $props->{track_id},
        );
        my $crossedAccountObj;
        if ( $crossedAccountMap && $crossedAccountMap->finance_account_id ) {
            $crossedAccountObj = RPS::Finance::Account->new( accountID => $crossedAccountMap->finance_account_id );

        }

        if ( !$crossedAccountObj ) {
            $crossedAccountObj = RPS::Finance::Account->new();

            $crossedAccountObj->CurrencyCode( $self->_currencyCode() );
        }

        $self->{FinanceAccount} = $crossedAccountObj;

        # I think we want to list all the licenses that are attached to this account.
        #
        $self->{CrossedLicenseList} = $self->_licenseList()
          ->new( trackID => $props->{track_id}, publisherID => $props->{ $self->_publisherID() }, payorID => $props->{payor_id} );
    }
}

sub save {
    my ($self) = @_;

    my $publisherID = $self->PublisherID();
    my $trackID     = $self->TrackID();
    my $payorID     = $self->PayorID();

    assert($publisherID);
    assert($trackID);
    assert($payorID);

    if ( !$self->{FinanceAccount}->Description() ) {
        $self->{FinanceAccount}->Description("crossed license account for track $trackID publisher $publisherID payor $payorID");
    }
    if ( !$self->{FinanceAccount}->TypeCode() ) {
        $self->{FinanceAccount}->TypeCode(RPS::DB::Item::FinanceAccount::kAccountTypeHoldover);
    }
    $self->{FinanceAccount}->save();
    my $accountID = $self->{FinanceAccount}->AccountID();

    my $crossedAccountMap = $self->_account()->Lookup(
        $self->_publisherID() => $publisherID,
        payor_id              => $payorID,
        track_id              => $trackID,
    );
    if ( !$crossedAccountMap ) {
        $crossedAccountMap = $self->_account()->Create(
            $self->_publisherID() => $publisherID,
            payor_id              => $payorID,
            track_id              => $trackID,
            finance_account_id    => $accountID,
        );
        $crossedAccountMap->save();
    }

    return 1;
}

###
1;    #
###

