#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::Payee::PayeeList;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistPayee;
use RPS::ArtistPayee::ArtistPayeeSimple;
use RPS::DB::Item::LabelPayee;
use RPS::LabelPayee::LabelPayeeSimple;
use RPS::DB::Item::Publisher;
use RPS::Publisher::US::PublisherSimple;
use RPS::DB::Item::CAPublisher;
use RPS::Publisher::CA::PublisherSimple;

use Common::FormObject;
use base 'Common::FormObject';

# This is a read-only XMLObject, so we don't need any
# of the accessor methods, just create the list of
# items and be on your way.
#

my %runTypeMap = (
    'artist/producer' => {
        dbClass      => 'RPS::DB::Item::ArtistPayee',
        xmlClass     => 'RPS::ArtistPayee::ArtistPayeeSimple',
        searchMethod => 'PayeeSearch',
    },
    'label' => {
        dbClass      => 'RPS::DB::Item::LabelPayee',
        xmlClass     => 'RPS::LabelPayee::LabelPayeeSimple',
        searchMethod => 'PayeeSearch',
    },
    'usmechanicals' => {
        dbClass      => 'RPS::DB::Item::Publisher',
        xmlClass     => 'RPS::Publisher::US::PublisherSimple',
        searchMethod => 'PublisherSearch',
    },
    'camechanicals' => {
        dbClass      => 'RPS::DB::Item::CAPublisher',
        xmlClass     => 'RPS::Publisher::CA::PublisherSimple',
        searchMethod => 'PublisherSearch',
    },
);

sub _init {
    my ( $self, %args ) = @_;

    $self->SUPER::_init(%args);
    $self->{Payee} = [];

    # We will use the run type to decide what kind of payee we are looking for.
    my $runType = lc $args{runType} || '';

    return $self unless exists $runTypeMap{$runType};

    my $hItem = $runTypeMap{$runType};
    my ($DbClass, $method) = ( $hItem->{dbClass}, $hItem->{searchMethod} );

    my $oPayeeCollection = $DbClass->$method(
        searchTerm => $args{query},
        limit => $args{limit} || 10,
        runID => $args{runID} || 0
    );

    my $XmlClass = $hItem->{xmlClass};
    while ( $oPayeeCollection->hasNext() ) {
        my $oPayee = $oPayeeCollection->next();
        push @{ $self->{Payee} }, $XmlClass->new( _dbItem => $oPayee );;
    }

    return $self;
}

1;
