package BookPub::Import::Importer::Zovio;

use strict;
use Data::Dumper;

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

sub _headerIdentifier { ( rTitle => 'Descrip' ) }

sub _fieldMap {
    my $self = shift;

    my %fieldMap = (
        1 => {
            dateBegin  => 'Q',
            rTitle     => 'P',
            rIsbn13    => 'S',
            rUnitPrice => 'V',
        },
    );

    return $fieldMap{ $self->_version() };
}

sub _unverifiedFieldMap {
    my $self = shift;

    my %fieldMap = (
        1 => {
            repeatsLine => 'D',
        },
    );

    return $fieldMap{ $self->_version() };
}

sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType  { BookPub::DB::Item::Sale::kProductTypeEBook }
sub priceType    { 'rrp' }
sub units        { 1 }

sub rInstitution { 'Bridgepoint Education' }
sub currencyCode { 'USD' }
sub countryCode  { 'US' }

sub _dateFormat { [ 'us', 'iso' ] }
sub _autoParseTitleAndSubtitle { 1 }
sub _useIsSaleRec              { 1 }

sub _processLine {
    my $self    = shift;
    my $repeats = $self->_getByFieldName('repeatsLine');

    if ( $repeats =~ /^Repeats/ ) {
        $self->{_endOfData} = 1;
        return;
    }

    return $self->SUPER::_processLine(@_);
}

sub _isSaleRec {
    my $self = shift;

    # If we've set the end of data flag in processLine, we are done.
    return if ( $self->{_endOfData} );

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

sub rIsbn13 {
    my $self = shift;

    if ( $self->{_rIsbn13} ) {
        return $self->{_rIsbn13};
    } else {
        my $rIsbn13 = $self->_getByFieldName("rIsbn13");
        $self->{_rIsbn13} = $rIsbn13;

        return $rIsbn13;
    }
}

sub rUnitPrice {
    my $self = shift;

    if ( $self->{_rUnitPrice} ) {
        return $self->{_rUnitPrice};
    } else {
        my $rUnitPrice = $self->_getByFieldName("rUnitPrice");
        $self->{_rUnitPrice} = $rUnitPrice;

        return $rUnitPrice;
    }
}

sub rRevenue {
    my $self = shift;
    my $rUnitPrice;
    my $units = $self->units();

    if ( $self->{_rUnitPrice} ) {
        $rUnitPrice = $self->{_rUnitPrice};
    } else {
        $rUnitPrice = $self->_getByFieldName("rUnitPrice");
    }

    return $rUnitPrice * $units;
}

1;
