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

package RPS::Import::GoodToGo;

use strict;

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

sub _fieldMap {
    {
        countryCode      => 'I',
        productType      => 'F',
        formatType       => 'J',
        artistName       => 'C',
        clientProductID  => 'A',
        albumName        => 'E',
        isrc             => 'B',
        trackName        => 'D',
        units            => 'K',
        price            => 'O',
    }
}

sub _headerIdentifier { ( isrc => 'identifier' ) }


sub currencyCode { 'EUR' }


sub mediaType { RPS::DB::Item::MediaType::kMediaTypeAudio; }


sub saleDates {
    my $self = shift;
    return( $self->{_startDate}, $self->{_endDate} ) if( $self->{_startDate} && $self->{_endDate} );

    my $filename = $self->filename;
    if( $filename =~ /(\d{4})(\d{2})(\d{2})_(\d{4})(\d{2})(\d{2})/ )
    {
        my($sYear, $sMonth, $sDay, $eYear, $eMonth, $eDay) = ($1, $2, $3, $4, $5, $6);
        my $sdate = sprintf("%04d-%02d-%02d", $sYear, $sMonth, $sDay);
        my $edate = sprintf("%04d-%02d-%02d", $eYear, $eMonth, $eDay);

        ( $self->{_startDate}, $self->{_endDate} ) = ( $sdate, $edate );
    }
    return( $self->{_startDate}, $self->{_endDate} );
}


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

    if($type =~ /^track$/i)
    {
        return RPS::File::Sale::TYPE_TRACK;
    } 
    else
    {
        $self->fail("Could not parse product type from '$type'");
    }
}

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

    if( $type =~ /^download$/i )
    {
        return RPS::File::Sale::FORMAT_DOWNLOAD;
    }
    elsif($type =~ /^(cloud|stream|none)$/i)
    {
        return RPS::File::Sale::FORMAT_STREAM;
    }
    else
    {
        $self->fail( "Could not parse format type from '$type'" );
    }
}


sub albumName {
    my $self = shift;
    my $name = $self->_getByFieldName('albumName');
    return ( $name =~ /'(.+)'/ ) ? $1 : $name;
}


sub units {
    my $self = shift;
    my $units = $self->SUPER::units() || return;
    my $price = $self->SUPER::price();

    # The 'sign' of the units is driven by the price.
    # If the price is negative, we'll store negative units,
    # regardless of whether the units were positive or negative
    # in the sale file.  Accordingly, the price is always
    # positive.  This ensures that returns are recorded correctly.
    #
    if( defined($price) )
    {
        return $price < 0 ? abs($units) * -1 : $units;
    }
    else
    {
        return $units;
    }
}


sub unitPrice {
    return abs( shift->SUPER::unitPrice() );
}


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