package BookPub::Import::Importer::Snapplify::v2;

use strict;
use warnings;

use lib '/app/tools/common/lib/';
use lib '/app/tools/bookpub/lib';
use parent 'BookPub::Import::Importer';


sub _fieldMap {
    my $self = shift;

    my %map = (
        2 => {
            dateBegin          => 'A',
            dateEnd            => 'A',
            priceType          => 'I15',
            rTitle             => 'D',
            rIsbn13            => 'C',
            countryCode        => 'G',
            rUnits             => 'F',
            rListPrice         => 'I',
            rListPriceCurrency => 'H',
            rDiscount          => 'K',
            rRevenue           => 'L',
            currencyCode       => 'H',
            rModel             => 'E',
        },
        3 => {
            dateBegin          => 'A',
            dateEnd            => 'A',
            priceType          => 'J15',
            rTitle             => 'E',
            rIsbn13            => 'D',
            countryCode        => 'H',
            rUnits             => 'G',
            rListPrice         => 'J',
            rListPriceCurrency => 'I',
            rDiscount          => 'L',
            rRevenue           => 'M',
            currencyCode       => 'I',
            rModel             => 'F',
        }
    );

    return $map{ $self->version };
}

sub _headerIdentifier { rTitle => 'Title' }

sub rServiceName  { 'Snapplify.com' }
sub priceType     { 'rrp' }
sub _useIsSaleRec { 1 }
sub purchaseType  { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType   { BookPub::DB::Item::Sale::kProductTypeEBook }

sub dateBegin {
    my $self = shift;

    my $date = $self->_getByFieldName('dateBegin') || '';

    # MM/DD/YYYY or MM/DD/YY or MM/D/YY
    if ( my($m, $d, $y) = $date =~ /^(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})$/ ) {
        return sprintf "20%02d-%02d-%02d", substr($y, -2), $m, $d;
    }
    # YYYY-MM-DD
    elsif ( my($y, $m, $d) = $date =~ /^(\d{4})[\/-](\d{1,2})[\/-](\d{1,2})$/ ) {
        return sprintf "%04d-%02d-%02d", $y, $m, $d;
    }

    $self->fail("Unable to determine dateBegin from: '$date'");
}

sub dateEnd {
    my $self = shift;

    my $date = $self->_getByFieldName('dateEnd') || '';
    # MM/DD/YYYY or MM/DD/YY or MM/D/YY
    if ( my($m, $d, $y) = $date =~ /^(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})$/ ) {
        return sprintf "20%02d-%02d-%02d", substr($y, -2), $m, $d;
    }
    # YYYY-MM-DD
    elsif ( my($y, $m, $d) = $date =~ /^(\d{4})[\/-](\d{1,2})[\/-](\d{1,2})$/ ) {
        return sprintf "%04d-%02d-%02d", $y, $m, $d;
    }

    $self->fail("Unable to determine dateEnd from: '$date'");
}

sub countryCode {
    my $self = shift;

    my $country = $self->_getByFieldName('countryCode') || '';
    return 'GB' if $country =~ /^GBP$/i;
    return 'US' if $country =~ /^USD$/i;
    return 'ZA' if $country =~ /^(?:ZAR|RSA)$/i;

    my $oCountry = Common::Country->Get($country) if $country;
    return $oCountry->alpha2() if $oCountry;

    $self->fail("Unknown country code '$country'");
}


1;
