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;


