#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# Copyright (C) 2012 RoyaltyShare, Inc.   All Rights Reserved
#---------------------------------------------------------------

package RPS::ArtistRoyalty::Fast::Final::ConsolidatedArtistRoyaltyRunMissedSaleLog;

use strict;
use Data::Dumper;
use File::Path;

use lib '/app/tools/common/lib';
use lib '/app/tools/rps/lib';
use lib '/app/tools/raptor/lib';
use Common::RSApp;
use Common::RSDB;
use RPS::DB::Item::ProductType;

use Data::Dumper;
use DB_File;

use RPS::ArtistRoyalty::Fast::Mapped::MissedSales;
use RPS::ArtistRoyalty::Fast::Static::ContractTitleArtists;

use Common::Log;

use base 'RPS::ArtistRoyalty::Fast::Final';

use constant kArtistRoyaltyRunID  => 0;
use constant kReason              => 1;
use constant kDetails             => 2;
use constant kAlbumID             => 3;
use constant kTrackID             => 4;
use constant kProductID           => 5;
use constant kArtistContractID    => 6;
use constant kUnits               => 7;
use constant kTotalRevenue        => 8;
use constant kArtistContractTitle => 9;
use constant kArtistName          => 10;
use constant kAlbumTitle          => 11;
use constant kCatalogNumber       => 12;
use constant kTrackTitle          => 13;
use constant kProductTypeID       => 14;
use constant kProductType         => 15;
use constant kFormatType          => 16;
use constant kGrossRevenue        => 17;

my @gFields = qw/
  artist_royalty_run_id
  reason
  details
  album_id
  track_id
  product_id
  artist_contract_id
  units
  total_revenue
  artist_contract_title
  artist_name
  album_title
  catalog_number
  track_title
  product_type_id
  product_type
  format_type
  gross_revenue
  /;

sub Fields { return \@gFields; }

sub FileName { 'consolidated_artist_royalty_run_missed_sale_log' }

sub GetCurrentMaxID {
    my ($class) = @_;

    return 0;
}

my $gRunID;

sub Init {
    my ( $class, $outputDirectory, $runID ) = @_;

    # Call the inherited method first.
    #
    $class->SUPER::Init($outputDirectory);

    $gRunID = $runID;
}

sub new {
    my ( $class, $data, $runID ) = @_;

    my $item = $class->BlankItem();

    $item->[kArtistRoyaltyRunID] = $gRunID;

    # Ultimately this will be a string, but we'll store the integer code in here for now to make comparison fast.
    #
    $item->[kReason]           = int( $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kReasonCode] ),
    $item->[kDetails]          = $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kDetails],
    $item->[kAlbumID]          = int($data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kAlbumID]),
    $item->[kTrackID]          = int($data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kTrackID]),
    $item->[kProductTypeID]    = int($data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kProductTypeID]),
    $item->[kFormatType]       = $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kFormatType],
    $item->[kArtistContractID] = int($data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kArtistContractID]),
    $item->[kUnits]            = $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kUnits],
    $item->[kTotalRevenue]     = $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kTotalRevenue],
    $item->[kGrossRevenue]     = $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kGrossRevenue],

    return bless( $item, $class );
}

sub process {
    my ( $self, $data ) = @_;

    # Test whether we're still looking at data for 'this' object.
    #
    if (
        $self->[kAlbumID] != int( $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kAlbumID] )
        || $self->[kTrackID] != int( $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kTrackID] )
        || $self->[kProductTypeID] != int($data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kProductTypeID])
        || $self->[kFormatType] ne $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kFormatType]
        || $self->[kArtistContractID] != int( $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kArtistContractID] )
        || $self->[kReason] != int( $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kReasonCode] )
        || $self->[kDetails] ne $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kDetails] ) {
        return undef;
    }

    $self->[kUnits] += $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kUnits];
    $self->[kTotalRevenue] += $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kTotalRevenue];
    $self->[kGrossRevenue] += $data->[RPS::ArtistRoyalty::Fast::Mapped::MissedSales::kGrossRevenue];

    return 1;
}

sub _output {
    my ( $self, $fd ) = @_;
    $self->[kReason] = RPS::ArtistRoyalty::Fast::Mapped::MissedSales::Reason( $self->[kReason] );
    $self->SUPER::_output($fd);
}

1;

