package InstinctArtistPayee;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistPayee;
use RPS::CountryList;

use Importer;
use base 'Importer';

my @gColumns = ( {
        fieldName => 'client_payee_id',
        required  => 1,
    },
    {
        fieldName => 'client_account_id',
        lookup    => 1,
    },
    {
        fieldName => 'name',
        required  => 1,
    },
    {
        fieldName => 'street_address',
    },
    {
        no_save => 1,
    },
    {
        no_save => 1,
    },
    {
        fieldName => 'city',
    },
    {
        fieldName => 'state_province',
    },
    {
        fieldName => 'postal_code',
    },
    {
        fieldName  => 'country_code',
        preProcess => 'deriveCountry',
    },
    {
        fieldName => 'phone_number',
    },
    {
        fieldName => 'fax_number',
    },
    {
        fieldName => 'tax_id',
    },
    undef,
    {
        fieldName  => 'cycle_code',
        preProcess => 'deriveCycleCode',
    },
    undef,
    {
        fieldName  => 'comments',
        preProcess => 'commentArtist',
    },
    {
        preProcess => 'commentProducer',
        no_save    => 1,
    },
);

my %gCountryMap = (
    aus      => 'AU',
    bel      => 'BE',
    bra      => 'BR',
    eng      => 'UK',
    england  => 'UK',
    fra      => 'FR',
    ger      => 'DE',
    germ     => 'DE',
    ita      => 'IT',
    jap      => 'JP',
    scotland => 'UK',
    swe      => 'SE',
    swit     => 'CH',
    usa      => 'US',
);

sub _columns {
    my @newColumns = @gColumns;
    return \@newColumns;
}

# actions to perform on each row after all fields are read in
sub post_parse_row {
    my ( $self, $fieldValues ) = @_;

    # join 3 address lines into 1
    $fieldValues->[3] = join( ' ', $fieldValues->[3], $fieldValues->[4], $fieldValues->[5] );

    # stuff producer # into comments next to artist #
    $fieldValues->[16] = join( ' ', $fieldValues->[16], $fieldValues->[17] );
}

sub commentArtist {
    my ( $self, $arg ) = @_;
    return "Artist#: $arg";
}

sub commentProducer {
    my ( $self, $arg ) = @_;
    return "Producer#: $arg";
}

sub deriveCountry {
    my ( $self, $c ) = @_;

    return if ( $c =~ /\d/ );
    my $cCode = RPS::CountryList::CountryCodeFor($c);
    return $cCode if $cCode;
    return $gCountryMap{ lc($c) } || uc($c);
}

sub deriveCycleCode {
    my ( $self, $cycle ) = @_;

    return
        $cycle =~ m/^q/i ? RPS::DB::Item::ArtistPayee::kCycleQuarterly
      : $cycle =~ m/^s/i ? RPS::DB::Item::ArtistPayee::kCycleSemiAnnual
      : $cycle =~ m/^a/i ? RPS::DB::Item::ArtistPayee::kCycleAnnual
      :                    0;
}

sub validate {
    my ( $self, $fieldConfig ) = @_;

    my $valid = $self->SUPER::validate($fieldConfig);

    return $valid;
}

sub lookup {
    my ( $self, $fieldValues ) = @_;

    my $itemID;

    my $lookups = $self->_getLookups($fieldValues);
    foreach my $lookupValue (@$lookups) {

        # Does this payee already exist?
        #
        my $coll = RPS::DB::Item::ArtistPayee->Match($lookupValue);
        if ( defined $coll && $coll->size == 1 ) {
            my $dbItem = $coll->next();
            $itemID = $dbItem->artist_payee_id;

            $self->found( $fieldValues, $itemID );
        }
    }

    return $itemID;
}

sub save {
    my ( $self, $fieldValues ) = @_;

    return $self->SUPER::save(
        dataRow => $fieldValues,
        class   => "RPS::DB::Item::ArtistPayee",
        id      => "artist_payee_id"
    );
}

1;

