#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::MapFace::ServiceList;

use strict;
use warnings;
use Data::Dumper;

use lib '/app/tools/data_classes/lib';
use Client::Service;

use lib '/app/tools/common/lib';
use Common::Assert;
use Common::FormObject;
use Common::DB::Item::MapFaceService;
use Common::MapFace::MapFaceService;

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

use Common::FormObject;
use base 'RPS::ServiceList';

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

    $self->SUPER::_init(%args);

    $self->{Service} = [];
	my $serviceCollection;
	
    if ($args{query}) {
		$serviceCollection = Common::DB::Item::MapFaceService->Search(searchTerm => $args{query}, limit => $args{limit});
    
        my %seen;
    
		while ($serviceCollection->hasNext())
		{
			my $serviceObj = $serviceCollection->next();
			push @{$self->{Service}}, Common::MapFace::MapFaceService->new(_dbItem => $serviceObj);
			
			# We need to suppres dupes between the mapface service list and the regular list.
			# Let's do it by service id, so that we will know if we end up with two entries
			# with the same name but different IDs (which shouldn't happen).
			$seen{$serviceObj->service_id} = 1;
		}	
		
		my %services = Client::Service::GetAllServiceNamesLike(name => $args{query}, limit => $args{limit});
		
		foreach my $serviceName (keys %services) {
		    my $serviceID = $services{$serviceName};
		    
		    # Ignore ones that we already added above.
		    if (!$seen{$serviceID}) {		    
    		    my $service = RPS::Service->new();
    		    
                $service->{ServiceID} = Common::FormObject::Scalar->new(value => $serviceID, readOnly => 1);
                $service->{ServiceName} = Common::FormObject::Scalar->new(value => $serviceName, readOnly => 1);
    		
    		    push @{$self->{Service}}, $service;        
    		}
        }
			
		@{$self->{Service}} = sort {$a->ServiceName() cmp $b->ServiceName()} @{$self->{Service}};

    }

    return $self;
}


1;
