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

use strict;
use warnings;
use Carp;

use Data::Dumper;

use lib '/app/tools/common/lib';

use lib '/app/tools/rps/lib';

use RPS::License::CA::TrackLicense;
use RPS::DB::Item::CAMechanicalStatementItem;

use RPS::DB::Item::Album;
use RPS::DB::Item::Product;
use RPS::DB::Item::CAStatRate;

use RPS::Statement::Mechanical::StatementItem;
use base 'RPS::Statement::Mechanical::StatementItem';

sub _getTrackLicense {
    my ( $self, $trackLicenseID ) = @_;
    return RPS::License::CA::TrackLicense->new( trackLicenseID => $trackLicenseID );
}

sub _getCurrencyCode {
    my ($self) = @_;
    return 'CAD';
}

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

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

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

    $hrProperties->{mechanical_statement_item_id} = $dbItem->ca_mechanical_statement_item_id;
    $hrProperties->{mechanical_statement_id}      = $dbItem->ca_mechanical_statement_id;
    $hrProperties->{track_license_id}             = $dbItem->ca_track_license_id;
    $hrProperties->{product_id}                   = $dbItem->product_id;
    $hrProperties->{issue_stat_rate_id}           = $dbItem->issue_stat_rate_id;
    $hrProperties->{sale_stat_rate_id}            = $dbItem->sale_stat_rate_id;
    $hrProperties->{applied_stat_rate_id}         = $dbItem->applied_stat_rate_id;
    $hrProperties->{sales}                        = $dbItem->sales;
    $hrProperties->{returns}                      = $dbItem->returns;
    $hrProperties->{previous_carryover}           = $dbItem->previous_carryover;
    $hrProperties->{carryover}                    = $dbItem->carryover;
    $hrProperties->{gross_units}                  = $dbItem->gross_units;
    $hrProperties->{net_units}                    = $dbItem->net_units;
    $hrProperties->{reserved}                     = $dbItem->reserved;
    $hrProperties->{liquidated}                   = $dbItem->liquidated;
    $hrProperties->{base_rate}                    = $dbItem->base_rate;
    $hrProperties->{net_rate}                     = $dbItem->net_rate;
    $hrProperties->{total}                        = $dbItem->total;
    $hrProperties->{amount_paid}                  = $dbItem->amount_paid;
    $hrProperties->{upc}                          = $dbItem->upc;
    $hrProperties->{isrc}                         = $dbItem->isrc;
    $hrProperties->{service}                      = $dbItem->service;
    $hrProperties->{hfa_reporting_period}         = $dbItem->hfa_reporting_period;
}

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

    $self->SUPER::_initProperties($props);

    # Some HFA-related stuff
    #
    # Use the applied stat rate ID if we have one, otherwise use the sale stat rate id.
    #
    my $statRateIDToUse = $props->{applied_stat_rate_id};
    if ( !$statRateIDToUse ) {
        $statRateIDToUse = $props->{sale_stat_rate_id};
    }
    my $ratePeriod = _getRatePeriod($statRateIDToUse);
    $self->{RatePeriod} = Common::FormObject::Scalar::String->new( value => $ratePeriod, maxlength => 32 );

    my $configurationCode;
    if ( RPS::DB::Item::Product::kProductTypeDigitalTrack == $self->{ProductTypeID} ) {
        $configurationCode = 'SP';
    } elsif ( RPS::DB::Item::Product::kProductTypeDigital == $self->{ProductTypeID} ) {
        $configurationCode = 'DP';
    } else {

        # assume physical - I don't see a code for this in the spec.
        #
        $configurationCode = 'CD';
    }
    $self->{ConfigurationCode} = Common::FormObject::Scalar::String->new( value => $configurationCode );
}

my $gRatePeriodMap;

sub _getRatePeriod {
    my ($id) = @_;

    return "" unless $id;

    if ( !$gRatePeriodMap ) {
        $gRatePeriodMap = RPS::DB::Item::StatRate->GetRatePeriodMap();
    }

    return $gRatePeriodMap->{$id};
}

###
1;    #
###

