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

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

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

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistRoyaltyIncomeItem;
use RPS::DB::Item::Album;
use RPS::DB::Item::Track;

use Common::FormObject;
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{artistRoyaltyIncomeItemID} ) {

        # I'm pretty sure we'll always be instantiating with _dbItem
        #
        $self->_propertiesFromDB( \%properties, $args{artistRoyaltyIncomeItemID} );
    } 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::ArtistRoyaltyIncomeItem->Lookup( artist_royalty_income_item_id => $id );
    $self->_propertiesFromDBItem( $hrProperties, $dbItem );
}

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

    $hrProperties->{artist_royalty_income_item_id} = $dbItem->artist_royalty_income_item_id;
    $hrProperties->{artist_royalty_album_id}       = $dbItem->artist_royalty_album_id;
    $hrProperties->{album_id}                      = $dbItem->album_id;
    $hrProperties->{track_id}                      = $dbItem->track_id;
    $hrProperties->{artist_contract_term_id}       = $dbItem->artist_contract_term_id;
    $hrProperties->{income_source_id}              = $dbItem->income_source_id;
    $hrProperties->{region_id}                     = $dbItem->region_id;
    $hrProperties->{channel_id}                    = $dbItem->channel_id;
    $hrProperties->{price_level_id}                = $dbItem->price_level_id;
    $hrProperties->{contract_rate_type_id}         = $dbItem->contract_rate_type_id;
    $hrProperties->{rate}                          = $dbItem->rate;
    $hrProperties->{rate_reduction}                = $dbItem->rate_reduction;
    $hrProperties->{percentage_of_sales}           = $dbItem->percentage_of_sales;
    $hrProperties->{packaging_deduction}           = $dbItem->packaging_deduction;
    $hrProperties->{free_goods_deduction}          = $dbItem->free_goods_deduction;
    $hrProperties->{sales}                         = $dbItem->sales;
    $hrProperties->{returns}                       = $dbItem->returns;
    $hrProperties->{units_reserved}                = $dbItem->units_reserved;
    $hrProperties->{revenue_reserved}              = $dbItem->revenue_reserved;
    $hrProperties->{units_liquidated}              = $dbItem->units_liquidated;
    $hrProperties->{revenue_liquidated}            = $dbItem->revenue_liquidated;
    $hrProperties->{net_units}                     = $dbItem->net_units;
    $hrProperties->{revenue}                       = $dbItem->revenue;
    $hrProperties->{net_revenue}                   = $dbItem->net_revenue;
    $hrProperties->{net_rate}                      = $dbItem->net_rate;
    $hrProperties->{uses_default_net_rate}         = $dbItem->uses_default_net_rate;
    $hrProperties->{price}                         = $dbItem->price;
    $hrProperties->{total}                         = $dbItem->total;

    $hrProperties->{base_rate}           = $dbItem->base_rate;
    $hrProperties->{prorate_track_count} = $dbItem->prorate_track_count;
}

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

    $self->{ArtistRoyaltyIncomeItemID} = Common::FormObject::Scalar->new( value => $props->{artist_royalty_income_item_id}, readOnly => 1 );
    $self->{ArtistRoyaltyAlbumID}      = Common::FormObject::Scalar->new( value => $props->{artist_royalty_album_id} );
    $self->{AlbumID}                   = Common::FormObject::Scalar->new( value => $props->{album_id} );
    $self->{UPC}                       = Common::FormObject::Scalar->new( value => $props->{upc_ean} );
    $self->{TrackID}                   = Common::FormObject::Scalar->new( value => $props->{track_id} );
    $self->{ArtistContractTermID}      = Common::FormObject::Scalar->new( value => $props->{artist_contract_term_id} );
    $self->{IncomeSourceID}            = Common::FormObject::Scalar->new( value => $props->{income_source_id} );
    $self->{RegionID}                  = Common::FormObject::Scalar->new( value => $props->{region_id} );
    $self->{ChannelID}                 = Common::FormObject::Scalar->new( value => $props->{channel_id} );
    $self->{PriceLevelID}              = Common::FormObject::Scalar->new( value => $props->{price_level_id} );
    $self->{ContractRateTypeID}        = Common::FormObject::Scalar->new( value => $props->{contract_rate_type_id} );
    $self->{Rate} = Common::FormObject::Scalar::Decimal->new( value => $props->{rate} );
    my $rateReduction = $props->{rate_reduction};
    $rateReduction = 100 unless $rateReduction > 0;
    $self->{RateReduction} = Common::FormObject::Scalar::Percent->new( value => $rateReduction );
    my $percentOfSales = $props->{percentage_of_sales};
    $percentOfSales = 100 unless $percentOfSales > 0;
    $self->{PercentageOfSales}  = Common::FormObject::Scalar::Percent->new( value => $percentOfSales );
    $self->{PackagingDeduction} = Common::FormObject::Scalar::Percent->new( value => $props->{packaging_deduction} );
    $self->{FreeGoodsDeduction} = Common::FormObject::Scalar::Percent->new( value => $props->{free_goods_deduction} );
    $self->{Sales}              = Common::FormObject::Scalar::Integer->new( value => $props->{sales} );
    $self->{Returns}            = Common::FormObject::Scalar::Integer->new( value => $props->{returns} );
    $self->{UnitsReserved}      = Common::FormObject::Scalar::Integer->new( value => $props->{units_reserved} );
    $self->{UnitsLiquidated}    = Common::FormObject::Scalar::Integer->new( value => $props->{units_liquidated} );
    $self->{RevenueLiquidated} = Common::FormObject::Scalar::Money->new( value => $props->{revenue_liquidated} );
    $self->{RevenueReserved}   = Common::FormObject::Scalar::Money->new( value => $props->{revenue_reserved} );
    $self->{NetUnits} = Common::FormObject::Scalar::Integer->new( value => $props->{net_units} );
    $self->{Revenue}    = Common::FormObject::Scalar::Money->new( value => $props->{revenue} );
    $self->{NetRevenue} = Common::FormObject::Scalar::Money->new( value => $props->{net_revenue} );
    $self->{NetRate} = Common::FormObject::Scalar::Decimal->new( value => $props->{net_rate} );
    $self->{UsesDefaultNetRate} = Common::FormObject::Scalar->new( value => $props->{uses_default_net_rate} );
    $self->{Price} = Common::FormObject::Scalar::Money->new( value => $props->{price} );
    $self->{Total} = Common::FormObject::Scalar::Money->new( value => $props->{total} );

    $self->{BaseRate} = Common::FormObject::Scalar::Decimal->new( value => $props->{base_rate} );
    $self->{ProrateTrackCount} = Common::FormObject::Scalar->new( value => $props->{prorate_track_count} );
}

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

    if ( $self->loadSubs() ) {

        # then let's get the album info
        #
        my $trackObj = RPS::DB::Item::Track->Lookup( track_id => $props->{track_id} );
        if ($trackObj) {
            my $trackTitle = $trackObj->title;
            $trackTitle =~ s/^\s+//;
            $trackTitle =~ s/\s+$//;
            $self->{TrackName} = Common::FormObject::Scalar::String->new( value => $trackTitle );
        } else {
            $self->{TrackName} = Common::FormObject::Scalar::String->new();
        }
    }
}

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

###
1;    #
###

