package BookPub::Import::Importer::DocStoc::Version1;

use strict;

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

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

sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub priceType    { 'rrp' }
sub rDistributor { 'Berrett-Koehler' }
sub rServiceName { 'DocStoc' }
sub currencyCode { 'USD' }
sub countryCode  { 'US' }
sub productType  { BookPub::DB::Item::Sale::kProductTypeEBook }

sub _fieldMap {
    {
        dateBegin  => 'A',
        rTitle     => 'B',
        rListPrice => 'C',
        rRevenue   => 'D',
        rUnits     => 'E',
    };
}

sub revenue {
    my $self    = shift;
    my $units   = $self->units();
    my $revenue = $self->SUPER::revenue();

    if ( $units && $units < 0 && $revenue && $revenue > 0 ) {
        return $revenue * -1;
    }

    return $revenue;
}

sub rRevenue {
    my $self = shift;

    my $revenue = $self->SUPER::rRevenue();
    $revenue =~ s/,|\$//g;

    return $revenue;
}

sub rListPrice {
    my $self = shift;

    my $price = $self->SUPER::rListPrice();
    $price =~ s/,|\$//g;

    return $price;
}

sub _isValidSaleRecord {
    my $self = shift;

    return $self->rTitle && $self->dateBegin;
}

# There's a 'Refunded' column containing 'no' for sales and 'yes' for refunds.
# Each row is a single unit
sub rReturns {
    my $self  = shift;
    my $value = $self->_getByFieldName('rUnits');

    return lc($value) eq 'yes' ? 1 : 0;
}

sub rSales {
    my $self  = shift;
    my $value = $self->_getByFieldName('rUnits');

    return lc($value) eq 'no' ? 1 : 0;
}

sub rUnits {
    my $self  = shift;
    my $value = $self->_getByFieldName('rUnits');

    if ( lc($value) eq 'yes' || lc($value) eq 'no' ) {
        return 1;
    }

    die "Bad value $value in units column";
}

1;
