package BookPub::Import::Importer::Juggernaut::v1;

use strict;
use warnings;

use lib '/app/tools/bookpub/lib';
use Date::Calc qw(Days_in_Month);

use parent 'BookPub::Import::Importer';

sub _fieldMap {
    {
        rAuthor        => 'C',
        rTitle         => 'B',
        rIsbn13        => 'A',
        rSales         => 'K',
        rUnits         => 'L',
        rListPrice     => 'E',
        rPurchasePrice => 'F',
        rDiscount      => 'P',
        rRevenue       => 'Q',
        isFree         => 'J',
    };
}

sub _unverifiedFieldMap { }

sub _headerIdentifier { rAuthor => 'Authors' }

my %months = (
    jan => 1,
    feb => 2,
    mar => 3,
    apr => 4,
    may => 5,
    jun => 6,
    jul => 7,
    aug => 8,
    sep => 9,
    oct => 10,
    nov => 11,
    dec => 12,
);

sub _useIsSaleRec { 1 }
sub purchaseType  { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType   { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rProductType  { BookPub::DB::Item::Sale::kProductTypeEBook }
sub priceType     { 'rrp' }
sub countryCode            { 'IN' }
sub currencyCode           { 'INR' }
sub rListPriceCurrency     { 'INR' }
sub rPurchasePriceCurrency { 'INR' }

sub rServiceName {
    return BookPub::Tracker::Service::GetDefaultServiceName( service_id => shift->serviceID );
}

sub dateBegin {
    my $self = shift;

    my $fileName = $self->filename();

    if ( $fileName =~ /(\d{4})[ _-]([a-z]{3})/i ) {
        return sprintf "%04d-%02d-%02d", $1, $months{ lc $2 }, 1;
    }

    $self->fail("Can't determine dateBegin from: '$fileName'.");
}

sub dateEnd {
    my $self = shift;

    my $fileName = $self->filename();

    if ( $fileName =~ /(\d{4})[ _-]([a-z]{3})/i ) {
        return sprintf "%04d-%02d-%02d", $1, $months{ lc $2 }, Days_in_Month( $1, $months{ lc $2 } );
    }

    $self->fail("Can't determine dateEnd from: '$fileName'.");
}

sub rUnits{
    return sprintf "%.f", $_[0]->_getByFieldName('rUnits') || 0;
}

sub isFree {
    return $_[0]->_getByFieldName('isFree') ? 'Y' : 'N';
}

sub _isSaleRec {
    my $self = shift;

    my $dateBegin = $self->_getByFieldName('dateBegin');
    my $isbn      = $self->_getByFieldName('rIsbn13');
    my $title     = $self->_getByFieldName('rTitle');
    my $author    = $self->_getByFieldName('rAuthor');

    if ( !$dateBegin && !$isbn && !$title && !$author ) {
        return 0;
    }

    return $self->SUPER::_isSaleRec();
}


1;