package BookPub::Import::Importer::Credo;

use strict;

use lib '/app/tools/common/lib';
use Common::Country;

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

sub _fieldMap {
    my $self = shift;

    my $map = {
        'perpetual access' => {
            serviceProductID => 'B',
            rIsbn13          => 'C',
            rTitle           => 'A',
            rUnits           => 'D',
            rDiscount        => 'F',
            rRevenue         => 'G',
        },
        'subscription' => {
            serviceProductID => 'B',
            rIsbn13          => 'C',
            rTitle           => 'A',
            rUnits           => 'D',
            rDiscount        => 'F',
            rRevenue         => 'G',
        },
        'general reference' => {
            rClientProductID => 'A',
            rIsbn13          => 'C',
            rTitle           => 'B',
            rUnits           => 'D',
            rRevenue         => 'K',
        },

    };

    my $sheet = lc( $self->sheetname ) || return {};
    return {} if ( $sheet =~ /revenue summary/i );

    return $map->{$sheet};
}

sub _unverifiedFieldMap {
    my $self = shift;

    my $map = {
        'perpetual access' => {
            totalRevenue => 'E',
        },
        'subscription' => {
            totalRevenue => 'E',
        }
    };

    my $sheet = lc( $self->sheetname ) || return {};
    return {} if ( $sheet =~ /revenue summary/i );

    return $map->{$sheet};
}

sub _headerIdentifier { (rIsbn13 => qr/^(?:Publisher ID|Pub ISBN\/Code)$/)  }

sub _useIsSaleRec     { 1 }
sub priceType         { 'rrp' }
sub currencyCode      { 'USD' }
sub countryCode       { 'US' }
sub productType       { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rProductType      { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rPurchaseType     { shift->purchaseType() }
sub _getDateBegin     { shift->{_dateBegin} }
sub _getDateEnd       { shift->{_dateEnd} }
sub _autoParseTitleAndSubtitle { 1 }

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

sub purchaseType {
    my $self = shift;

    if ( $self->sheetname =~ /^perpetual access$/i ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    }

    if ( $self->sheetname =~ /^subscription$/i ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeSubscriptionDL;
    }

    if ( $self->sheetname =~ /^General Reference$/i ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeStream;
    }
}

sub _preProcess {
    my $self = shift;
    my %args = @_;

    Log->info("Starting _preProcess");
    $self->SUPER::_preProcess(%args);

    my $sheetnum = 0;

    # We need to grab the date from the summary sheet
    foreach my $sheet ( @{ $args{sheets} } ) {
        my $sheetname = $args{sheet_names}->[$sheetnum];
        $sheetnum++;
        if ( $sheetname =~ /Revenue Summary/ ) {
            foreach my $line (@$sheet) {
                if ( $line->[0] =~ /Royalty Period: (\d{2})\/(\d{2})\/(\d{2,4}) to (\d{2})\/(\d{2})\/(\d{2,4})/i ) {
                    my ($y1, $y2) = ($3, $6);
                    if (length($y1) == 2 ) {

                        $y1 = "20" . $y1;
                        $y2 = "20" . $y2;
                    }
                    $self->{_dateBegin} = sprintf("%04d-%02d-%02d",  $y1, $1, $2);
                    $self->{_dateEnd} = sprintf("%04d-%02d-%02d",  $y2, $4, $5);
                    last;
                } else {
                    next;
                }
            }
        }
    }
}

sub units {
    my $self = shift;

    my $units = $self->SUPER::units();

    return 3 if ($self->sheetname =~ /General Reference/i );
    return $self->SUPER::units();
}

sub rUnitPrice {
    my $self = shift;

    if ( $self->sheetname =~ /^(?:perpetual access|subscription)$/i ) {
        return $self->rRevenue / $self->rUnits;
    }
}

sub rListPriceCurrency {
    my $self = shift;

    if ( $self->sheetname =~ /^(?:perpetual access|subscription)$/i ) {
        return 'USD';
    }
}

sub rListPrice {
    my $self = shift;

    return unless $self->sheetname =~ /^(?:perpetual access|subscription)$/i;

    my $totalRevenue = $self->_getByFieldName('totalRevenue') || 0;
    return $totalRevenue / $self->rUnits;
}

sub isFree {
    my $self = shift;

    if ( $self->sheetname =~ /^(?:perpetual access|subscription)$/i ) {
        return !$self->rRevenue && $self->rUnits ? 'Y' : 'N';
    }
}

sub _isSaleRec {
    my $self = shift;

    return undef unless ($self->SUPER::_isSaleRec && $self->rIsbn13 && $self->rTitle !~ /Totals/ && $self->rClientProductID !~ /Totals/);

    return 1;
}


1;
