#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Support::ServiceCredential::ServiceCredentialSimple;

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::ServiceCredential;

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{serviceCredentialID} ) {
        return $self->_initFromDB( $args{serviceCredentialID} );
    } else {
        return $self->_initProperties( {} );
    }
}

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

    my $dbItem = Distribution::DB::Item::ServiceCredential->Lookup( service_credential_id => $serviceCredentialID );

    return $self->_initFromDBItem($dbItem);
}

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

    my %properties = (
        service_credential_id => $dbItem->service_credential_id,
        description           => $dbItem->description,
        protocol              => $dbItem->protocol,
        port                  => $dbItem->port,
        sfx_acct_name         => $dbItem->sfx_acct_name,
        hostname              => $dbItem->hostname,
        username              => $dbItem->username,
        password              => $dbItem->password,
        authfile              => $dbItem->authfile,
    ) if ($dbItem);

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

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

    $self->{ServiceCredentialID} = Common::FormObject::Scalar::Integer->new( value => $prop->{service_credential_id}, readOnly => 1 );
    $self->{Description} = Common::FormObject::Scalar::String->new( value => $prop->{description}, required => 1 );
    $self->{Port}        = Common::FormObject::Scalar::String->new( value => $prop->{port} );
    $self->{Protocol}    = Common::FormObject::Scalar::String->new( value => $prop->{protocol} );
    $self->{SfxAcctName} = Common::FormObject::Scalar::String->new( value => $prop->{sfx_acct_name} );
    $self->{Hostname}    = Common::FormObject::Scalar::String->new( value => $prop->{hostname} );
    $self->{Username}    = Common::FormObject::Scalar::String->new( value => $prop->{username} );
    $self->{Password}    = Common::FormObject::Scalar::String->new( value => $prop->{password} );
    $self->{Authfile}    = Common::FormObject::Scalar::String->new( value => $prop->{authfile} );

    return $self;
}

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

    $valid = 0
      unless ( $self->Protocol && $self->Protocol =~ /^(itms|ftp|sftp)$/ );

    return $valid;
}

sub save {
    my $self = shift;

    my $dbItem = Distribution::DB::Item::ServiceCredential->Lookup( service_credential_id => $self->ServiceCredentialID )
      if ( $self->ServiceCredentialID );

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

    $dbItem->description( $self->Description );
    $dbItem->protocol( $self->Protocol );
    $dbItem->sfx_acct_name( $self->SfxAcctName );
    $dbItem->hostname( $self->Hostname );
    $dbItem->username( $self->Username );
    $dbItem->password( $self->Password );
    $dbItem->authfile( $self->Authfile );

    $dbItem->save();

    $self->_initFromDBItem($dbItem);
}

1;
