#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package Support::ServiceAccount::ServiceAccountSimple;

use strict;
use warnings;
use Carp;

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

use lib '/app/tools/support/lib';
use Distribution::DB::Item::ServiceAccount;

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

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

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

    if ( $args{_dbItem} ) {
        return $self->_initFromDBItem( $args{_dbItem} );
    } elsif ( $args{serviceAccountID} ) {
        return $self->_initFromDB( $args{serviceAccountID}, $args{clientID} );
    } else {
        return $self->_initProperties( {} );
    }
}

sub _initFromDB {
    my ( $self, $serviceAccountID, $clientID ) = @_;

    my $collection =
      Distribution::DB::Item::ServiceAccount->LookupWithClient( service_account_id => $serviceAccountID, client_id => $clientID );

    return $self->_initFromDBItem( $collection->next );
}

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

    my %properties = (
        service_account_id    => $dbItem->service_account_id,
        service_id            => $dbItem->service_id,
        client_id             => $dbItem->{client_id},
        description           => $dbItem->description,
        account_name          => $dbItem->account_name,
        account_type          => $dbItem->account_type,
        service_credential_id => $dbItem->service_credential_id,
        remote_base_path      => $dbItem->remote_base_path,
    ) if ($dbItem);

    return $self->_initProperties( \%properties );
}

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

    $self->{ServiceAccountID}    = Common::FormObject::Scalar::Integer->new( value => $prop->{service_account_id}, readOnly => 1 );
    $self->{ClientID}            = Common::FormObject::Scalar::Integer->new( value => $prop->{client_id} );
    $self->{ServiceID}           = Common::FormObject::Scalar::Integer->new( value => $prop->{service_id}, required => 1 );
    $self->{ServiceCredentialID} = Common::FormObject::Scalar::Integer->new( value => $prop->{service_credential_id} );
    $self->{Description}    = Common::FormObject::Scalar::String->new( value => $prop->{description} );
    $self->{AccountName}    = Common::FormObject::Scalar::String->new( value => $prop->{account_name} );
    $self->{AccountType}    = Common::FormObject::Scalar::String->new( value => $prop->{account_type} );
    $self->{RemoteBasePath} = Common::FormObject::Scalar::String->new( value => $prop->{remote_base_path} );

    return $self;
}

sub validate {
    my $self  = shift;
    my $valid = $self->SUPER::validate(@_);

    $valid = 0
      unless ( $self->AccountType && $self->AccountType =~ /^(royaltyshare|direct)$/ );

    return $valid;
}

sub save {
    my $self = shift;

    my $dbItem = Distribution::DB::Item::ServiceAccount->Lookup( service_account_id => $self->ServiceAccountID )
      if ( $self->ServiceAccountID );

    $dbItem = Distribution::DB::Item::ServiceAccount->Create() unless ($dbItem);

    $dbItem->service_id( $self->ServiceID );
    $dbItem->description( $self->Description );
    $dbItem->account_name( $self->AccountName );
    $dbItem->account_type( $self->AccountType );
    $dbItem->service_credential_id( $self->ServiceCredentialID );
    $dbItem->remote_base_path( $self->RemoteBasePath );

    $dbItem->save();

    $self->_initFromDBItem($dbItem);

}

1;
