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

package RPS::Import::WMG::WarnerUKPhysical;

use strict;

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

use lib '/app/tools/rps/lib';
use base 'RPS::Import::Importer';

sub _fieldMap {
    {
        dateBegin => 'A',    # stm_recdate

        artistName       => 'AC',    # con_name
        serviceProductID => 'C',     # stm_catno

        albumName => 'AD',           # cat_title
        labelName => 'AG',           # com_name

        productType => 'AB',         # pak_desc
        formatType  => 'AE',         # pri_desc

        sales          => 'H',       # sales
        salesRevenue   => 'M',       # stm_royalty
        returns        => 'H',       # sales
        returnsRevenue => 'M',       # stm_royalty
        totalRevenue   => 'M',       # stm_royalty

        countryCode => 'AA',         # ter_location
    };
}

sub _headerIdentifier { ( albumName => 'cat_title' ) }

sub currencyCode { 'GBP'; }

sub channel { RPS::File::Sale::CHANNEL_RETAIL; }

sub saleDates {
    my $self = shift;

    my $dateBegin;
    my $dateEnd;

    my $startDate = $self->_getDateBegin();

    if ($startDate) {
        ( $dateBegin, $dateEnd ) = $self->_getDates( date_begin => $startDate );
    }

    return ( $dateBegin, $dateEnd );
}

sub countryCode {
    my $self = shift;

    my $countryName = $self->_getByFieldName('countryCode');

    my %countryMap = (
        "argentina satellite"           => "Argentina",
        "central europe"                => "Germany",
        "columbia"                      => "Colombia",
        "greece wm"                     => "Greece",
        "denmark wea"                   => "Denmark",
        "eastern europe"                => "Poland",
        "mton kft (hungary)"            => "Hungary",
        "new zealand wm"                => "New Zealand",
        "n. ireland"                    => "United Kingdom",
        "supraphon (czech rep)"         => "Czech Republic",
        "serengeti records (ghana)"     => "Ghana",
        "serengeti records (mauritius)" => "Mauritius",
        "wm taiwan"                     => "Taiwan",
        "ivory coast"                   => "Côte d'Ivoire",
        "farol musica (portugal)"       => "Portugal",
    );

    $countryName = $countryMap{ lc $countryName } || $countryName;

    my $o = Common::Country->Get($countryName);

    if ($o) {
        return $o->alpha2();
    }

    $self->fail("Unable to determine country from '$countryName'");

}

sub productType {
    my $self     = shift;
    my $pak_desc = $self->_getByFieldName('productType');

    if ( $pak_desc =~ /CD Album/i ) {
        return RPS::File::Sale::TYPE_CD;
    }

    $self->fail("Unable to determine product from pak_desc($pak_desc)");
}

sub priceLevel {
    my $self     = shift;
    my $pri_desc = $self->_getByFieldName('formatType');

    if (   $pri_desc =~ /^Full-Price$/i
        || $pri_desc =~ /^Full \/ TV Advertised$/i ) {
        return RPS::File::Sale::PLEVEL_FULL;
    }
    $self->fail("Unable to determine price tier from pri_desc($pri_desc)");
}

sub sales {
    my $self  = shift;
    my $sales = $self->_getByFieldName('sales');
    return ( $sales > 0 ) ? $sales : 0;
}

sub salesRevenue {
    my $self         = shift;
    my $salesRevenue = $self->_getByFieldName('salesRevenue');
    return ( $salesRevenue > 0 ) ? $salesRevenue : 0;
}

sub returns {
    my $self         = shift;
    my $sales        = $self->_getByFieldName('sales');
    my $salesRevenue = $self->_getByFieldName('salesRevenue');
    return ( $sales < 0 && $salesRevenue < 0 ) ? abs($sales) : 0;
}

sub returnsRevenue {
    my $self         = shift;
    my $sales        = $self->_getByFieldName('sales');
    my $salesRevenue = $self->_getByFieldName('salesRevenue');
    return ( $sales < 0 && $salesRevenue < 0 ) ? abs($salesRevenue) : 0;
}

sub _isValidSaleRecord {
    my $self = shift;
    return ( defined( $self->sales ) && ( $self->trackName || $self->albumName ) );
}

sub _preProcess {
    my ( $self, %args ) = @_;
    $self->SUPER::_preProcess(%args);
    my $fileObj = $args{file};
    $fileObj->Physical(1);
}

###
1;    # Play nicely.
###
