package BookPub::Import::Importer::Sony::Version3;

use strict;

use Date::Calc qw(Add_Delta_Days);

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

use lib '/app/tools/bookpub/lib';
use BookPub::DB::Item::Sale;
use BookPub::Import::SaleRec;
use base 'BookPub::Import::Importer';

# map of data columns
my %FIELD_MAP = (
    transaction   => 0,
    country       => 1,
    isbn          => 2,
    title         => 3,
    sales         => 4,
    returns       => 5,
    units         => 6,
    listPrice     => 7,
    discountPromo => 8,
    purchasePrice => 9,
    discountComm  => 13,
    revenue       => 17,
    dateSale      => 18,
);

#public methods

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

    my $lines     = $args{lines};
    my $saleCount = 0;

    for ( my $i = 0 ; $i < scalar @$lines ; $i++ ) {
        my $line = $lines->[$i];

        #my $transType   = $line->[ $FIELD_MAP{transaction} ];
        my $country       = $line->[ $FIELD_MAP{country} ];
        my $isbn          = $line->[ $FIELD_MAP{isbn} ];
        my $title         = $line->[ $FIELD_MAP{title} ];
        my $sales         = $line->[ $FIELD_MAP{sales} ];
        my $returns       = $line->[ $FIELD_MAP{returns} ];
        my $units         = $line->[ $FIELD_MAP{units} ];
        my $listPrice     = $line->[ $FIELD_MAP{listPrice} ];
        my $purchasePrice = $line->[ $FIELD_MAP{purchasePrice} ];
        my $discPromo     = $line->[ $FIELD_MAP{discountPromo} ] || 0;
        my $discComm      = $line->[ $FIELD_MAP{discountComm} ] || 0;
        my $revenue       = $line->[ $FIELD_MAP{revenue} ];
        my $date          = $line->[ $FIELD_MAP{dateSale} ];

        #next unless ($revenue =~ m/\d/ && abs($revenue) > 0);
        unless ( $revenue =~ m/\d/ && ( $isbn || $title ) ) {
            Common::Log::Print("skip based on revenue: '$revenue', isbn: '$isbn' ($i)");
            next;
        }
        substr( $isbn, 0, 0 ) = 0 if ( length($isbn) == 9 );    # add the missing leading 0

        my $saleDate =
          $date =~ m/^(\d+)$/
          ? join( '-', Add_Delta_Days( 1900, 1, 1, $1 - 2 ) )
          : $date;
        $saleDate = Common::Util::normalize_date($saleDate);

        my $discount = $discPromo + $discComm;
        my $unitPrice = $units ? $revenue / $units : 0;

        my $currencyFormat = Common::CurrencyFormat->new( countryCode => $country );
        my $currencyCode = $currencyFormat->currencyCode();

        my $saleRec = BookPub::Import::SaleRec->new();

        # defaults
        $saleRec->productType(BookPub::DB::Item::Sale::kProductTypeEBook);
        $saleRec->formatType(BookPub::DB::Item::Sale::kFormatTypeEReader);
        $saleRec->purchaseType(BookPub::DB::Item::Sale::kPurchaseTypeDownload);
        $saleRec->lineNum( $i + 1 );

        $saleRec->dateBegin($saleDate);
        $saleRec->dateEnd($saleDate);

        $saleRec->listPrice($listPrice);
        if ($unitPrice) {
            $saleRec->unitPrice($unitPrice);
            $saleRec->discount( BookPub::Import::Importer::CalculateDiscount( $unitPrice, $listPrice ) );
        }
        $saleRec->units($units);
        $saleRec->revenue($revenue);
        $saleRec->countryCode($country);
        $saleRec->currencyCode($currencyCode);

        $saleRec->isAgency('Y');
        $saleRec->rTitle($title);
        $saleRec->rSales($sales);
        $saleRec->rReturns($returns);
        $saleRec->rUnits($units);
        $saleRec->rListPrice($listPrice);
        $saleRec->rPurchasePrice($purchasePrice);
        $saleRec->rDiscount($discount);
        $saleRec->rRevenue($revenue);

        length($isbn) > 10 ? $saleRec->rIsbn13($isbn) : $saleRec->rIsbn10($isbn);

        #$args{dumper}($saleRec);
        $self->_insertSale( sale => $saleRec );
        $saleCount++;
    }

    return $saleCount;
}

1;
