#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# 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.
###
