#------------------------------------------------------------
# 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;
