package BookPub::Import::Importer::Vivlio::v1;

use strict;
use warnings;

use Common::UTF8;

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

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

sub _fieldMap {
    {
        rServiceName           => 'G',
        dateBegin              => 'A',
        dateEnd                => 'A',
        rFormat                => 'E',
        rTitle                 => 'D',
        rIsbn13                => 'C',
        rImprint               => 'B',
        rInstitution           => 'G',
        rState                 => 'L',
        countryCode            => 'K',
        rUnits                 => 'N',
        rListPrice             => 'P',
        rListPriceCurrency     => 'W',
        rPurchasePrice         => 'O',
        rPurchasePriceCurrency => 'W',
        rRevenue               => 'AH',
        currencyCode           => 'AC',
        rTaxAmount             => 'AG',
        rTaxUnitPrice          => 'AF',
        isPreOrder             => 'AI',
        rPromoCode             => 'X',
        rChannel               => 'H',
    };
}

sub _unverifiedFieldMap { }

sub _headerIdentifier { rIsbn13 => 'EAN' }

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 rTitle        { Common::UTF8::Encode( shift->_getByFieldName('rTitle')       || '' ) }
sub rInstitution  { Common::UTF8::Encode( shift->_getByFieldName('rInstitution') || '' ) }
sub rChannel      { Common::UTF8::Encode( shift->_getByFieldName('rChannel')     || '' ) }

sub priceType {
    # MMUK - rrp
    return Common::RSApp::GetClientID == 359 ? 'rrp' : 'agency';
}

sub rServiceName {
    my $self = shift;

    my $name = $self->_getByFieldName('rServiceName') || '';
    return 'Vivlio' if $name =~ /^TEA$/i;

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

sub dateBegin {
    my $self = shift;

    my $date = $self->_getByFieldName('dateBegin') || '';
    if ( $date =~ /^(\d{4})-(\d{1,2})$/ ) {
        return sprintf "%04d-%02d-%02d", $1, $2, 1;
    }

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

sub dateEnd {
    my $self = shift;

    my $date = $self->_getByFieldName('dateEnd') || '';
    if ( $date =~ /^(\d{4})-(\d{1,2})$/ ) {
        return sprintf "%04d-%02d-%02d", $1, $2, Days_in_Month( $1, $2 );
    }

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

sub rUnits {
    my $self = shift;

    my $rUnits = $self->_getByFieldName('rUnits') || 0;

    return $rUnits;
}

sub isPreOrder {
    my $self = shift;

    my $preOrder = $self->_getByFieldName('isPreOrder') || '';
    return "Y" if $preOrder =~ /^OUI$/i;
    return "N" if $preOrder =~ /^NON$/i;

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

sub _isSaleRec {
    my $self = shift;

    return unless (
           $self->rTitle
        && $self->rIsbn13
        && $self->countryCode
        && $self->currencyCode
    );

    return $self->BookPub::Import::Importer::_isSaleRec();
}


1;
