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

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

use lib '/app/tools/rps/lib';
use RPS::DB::Item::CAMechanicalRunUnlicensedTrackLog;

use base 'RPS::Report';

sub _baseXMLName { 'Track' }

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

    my $runID = $args{runID};

    my $labelList = RPS::DB::Item::CAMechanicalRunUnlicensedTrackLog->GetLabelsByRunID($runID);
    while ( my $label = $labelList->next() ) {
        my $hash = $self->_fillInLabelHash($label);

        push @{ $self->{LabelList}{Label} }, $hash;
    }

    my $run = RPS::DB::Item::CAMechanicalRun->Lookup( ca_mechanical_run_id => $runID );

    $self->{MechanicalRun} = RPS::Mechanical::CA::MechanicalRun->new( mechanicalRunID => $runID, payorID => $run->payor_id );

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

sub _getDBItem() {
    my $self = shift;
    my %args = @_;

    my $runID   = $args{runID};
    my $labelID = $args{labelID};

    return RPS::DB::Item::CAMechanicalRunUnlicensedTrackLog->GetByRunID($runID, $labelID);
}

sub _reportColumns {
    my $self = shift;

    return (
        "RunName"          => "Run Name",
        "CatalogNumber"    => "Catalog #",
        "ClientAlbumID"    => "Client Album ID",
        "LabelName"        => "Label",
        "AlbumTitle"       => "Album Title",
        "AlbumArtist"      => "Album Artist",
        "UPC"              => "UPC",
        "AlbumDateCreated" => "Album Date Created",
        "AlbumID"          => "RS Album ID",
        "TrackTitle"       => "Track Title",
        "TrackArtist"      => "Track Artist",
        "ISRC"             => "ISRC",
        "TrackID"          => "RS Track ID",
        "UnlicensedShare"  => "Share",
        "ProductType"      => "Config",
        "Year"             => "Year",
        "Rate"             => "Rate",
        "Units"            => "Units",
        "Accrual"          => "Cumulative Accrual CAD",
        "AlbumCustom1"     => "Album Custom 1",
        "AlbumCustom2"     => "Album Custom 2",
        "AlbumCustom3"     => "Album Custom 3",
        "TrackCustom1"     => "Track Custom 1",
        "TrackCustom2"     => "Track Custom 2",
        "TrackCustom3"     => "Track Custom 3",
    );
}

sub _fillInHash {
    my ( $self, $logLine ) = @_;

    my %data;

    # If we have a product title, we'll use that here.
    # Otherwise, fall back to the album title
    if ( $logLine->product_title ) {
        $data{AlbumTitle} = $logLine->product_title;
    } else {
        $data{AlbumTitle} = $logLine->album_title;
    }

    # Let's keep the rest of these in alphabetical order
    $data{Accrual}          = Common::Client::Current()->Locale()->formatNumber( $logLine->accrual, .2 );
    $data{AlbumArtist}      = $logLine->album_artist;
    $data{AlbumCustom1}     = $logLine->album_custom_1;
    $data{AlbumCustom2}     = $logLine->album_custom_2;
    $data{AlbumCustom3}     = $logLine->album_custom_3;
    $data{AlbumDateCreated} = $logLine->album_date_created;
    $data{AlbumID}          = $logLine->album_id;
    $data{CatalogNumber}    = $logLine->catalog_number;
    $data{ClientAlbumID}    = $logLine->client_album_id;
    $data{ISRC}             = $logLine->isrc;
    $data{LabelName}        = $logLine->label_name;
    $data{ProductID}        = $logLine->product_id;
    $data{ProductTitle}     = $logLine->product_title;
    $data{ProductType}      = $logLine->product_type;
    $data{Rate}             = ( $logLine->rate != 0 ) ? Common::Client::Current()->Locale()->formatNumber( $logLine->rate, .4 ) : '';
    $data{RunName}          = $self->{MechanicalRun}{Label};
    $data{TrackArtist}      = $logLine->track_artist;
    $data{TrackCustom1}     = $logLine->track_custom_1;
    $data{TrackCustom2}     = $logLine->track_custom_2;
    $data{TrackCustom3}     = $logLine->track_custom_3;
    $data{TrackID}          = $logLine->track_id;
    $data{TrackTitle}       = $logLine->track_title;
    $data{Units}            = $logLine->units;
    $data{UnlicensedShare}  = Common::Client::Current()->Locale()->formatNumber( $logLine->unlicensed_share, .2 );
    $data{UPC}              = $logLine->upc_ean;
    $data{Year}             = $logLine->year;

    return \%data;
}

sub _fillInLabelHash {
    my ( $self, $label ) = @_;

    my %data;

    $data{LabelID}   = $label->label_id;
    $data{LabelName} = $label->label_name;

    return \%data;
}

###
1;    #
###
