#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Distribution::DistributionProcess::ServiceAccount;

use strict;
use warnings;

use lib '/app/tools/distribution/lib';

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

use base 'Common::FormObject';

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

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

    my %properties;

    if ( $args{_dbItem} ) {
        $self->_propertiesFromDBItem( \%properties, $args{_dbItem} );
    } elsif ( $args{serviceID} && $args{clientID} ) {
        $self->_propertiesFromDB( \%properties, %args );
    } else {
        $self->_propertiesFromDefaults( \%properties );
    }

    $self->_initProperties( \%properties );

    return $self;
}

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

    my $dbItem = Distribution::DB::Item::ServiceAccount->GetAccountInfo(
        service_id => $args{serviceID},
        client_id  => $args{clientID}
    );

    if ($dbItem) {
        $self->_propertiesFromDBItem( $hrProperties, $dbItem );
    } else {
        assert( 0, "No service credentials found" );
    }
}

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

    assert($dbItem);

    $hrProperties->{code}     = $dbItem->{code};
    $hrProperties->{port}     = $dbItem->{port};
    $hrProperties->{protocol} = $dbItem->{protocol};
    $hrProperties->{basepath} = $dbItem->{basepath};
    $hrProperties->{sfxacct}  = $dbItem->{sfxacct};
    $hrProperties->{username} = $dbItem->{username};
    $hrProperties->{password} = $dbItem->{password};
    $hrProperties->{hostname} = $dbItem->{hostname};
    $hrProperties->{authfile} = $dbItem->{authfile};
}

sub _propertiesFromDefaults {
    my ( $self, $hrProperties ) = @_;

    assert( 0, "No default allowed" );
}

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

    $self->{Code}       = Common::FormObject::Scalar->new( value => $props->{code},     readOnly => 1 );
    $self->{Port}       = Common::FormObject::Scalar->new( value => $props->{port},     readOnly => 1 );
    $self->{Protocol}   = Common::FormObject::Scalar->new( value => $props->{protocol}, readOnly => 1 );
    $self->{BasePath}   = Common::FormObject::Scalar->new( value => $props->{basepath}, readOnly => 1 );
    $self->{SFXAccount} = Common::FormObject::Scalar->new( value => $props->{sfxacct},  readOnly => 1 );
    $self->{Username}   = Common::FormObject::Scalar->new( value => $props->{username}, readOnly => 1 );
    $self->{Password}   = Common::FormObject::Scalar->new( value => $props->{password}, readOnly => 1 );
    $self->{Hostname}   = Common::FormObject::Scalar->new( value => $props->{hostname}, readOnly => 1 );
    $self->{AuthFile}   = Common::FormObject::Scalar->new( value => $props->{authfile}, readOnly => 1 );
}

1;
