#------------------------------------------------------------
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Support::Service::ServiceSimple;

use strict;
use warnings;
use Carp;

use lib '/app/tools/common/lib';
use Common::Assert;

use lib '/app/tools/support/lib';

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

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

use overload ( 'cmp' => \&threeway_compare );

sub threeway_compare {
    my ( $s1, $s2 ) = @_;

    return uc( $s1->ServiceName ) cmp uc( $s2->ServiceName );
}

use overload ( '""' => \&stringify );

sub stringify {
    my $self = shift;
    return $self->ServiceName();
}

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

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

    if ( $args{_dbItem} ) {
        return $self->_initFromDBItem( $args{_dbItem} );
    } elsif ( $args{serviceID} ) {
        return $self->_initFromHash( $args{serviceID} );
    } else {
        return $self->_initProperties( {} );
    }
}

sub _initFromDBItem {
    my ( $self, $dbItem ) = @_;

    my $serviceID  = $dbItem->service_id;
    my $name       = $dbItem->service_name;
    my $clean_name = $dbItem->service_name_clean;

    my $props = {
        service_id         => $serviceID,
        service_name       => $name,
        service_name_clean => $clean_name
    };

    return $self->_initProperties($props);
}

sub _initFromHash {
    my ( $self, $serviceID ) = @_;

    Common::Log::Debug("ID: $serviceID");

    my $name = Client::Service::GetDefaultServiceName( service_id => $serviceID );
    my $clean_name = Client::Service::GetDefaultServiceName( service_id => $serviceID, clean => 1 );

    assert( $name, "Unknown Service ID" );

    my $props = {
        service_id         => $serviceID,
        service_name       => $name,
        service_name_clean => $clean_name
    };

    return $self->_initProperties($props);
}

sub _initProperties {
    my ( $self, $prop ) = @_;

    $self->{ServiceID} = Common::FormObject::Scalar->new( value => $prop->{service_id}, readOnly => 1 );
    $self->{ServiceName} = Common::FormObject::Scalar::String->new( value => $prop->{service_name}, required => 1 );
    $self->{ServiceNameClean} = Common::FormObject::Scalar::String->new( value => $prop->{service_name_clean} );

    return $self;
}

1;
