#------------------------------------------------------------
# Copyright (C) 2011 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package Support::BookPub::ServiceCredential;

use strict;
use warnings;
use Carp;
use Data::Dumper;

use lib '/app/tools/common/lib';
use Common::ClientSettings::Service;
use Common::Assert;
use Common::Log;

use lib '/app/tools/bookpub/lib';
use BookPub::Tracker::Service;

use lib '/app/tools/support/lib';
use Support::DB::Item::BookPubServiceCredential;

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

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

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

    if ( $args{_dbItem} ) {
        Common::Log::Debug("In the if");
        assert( 0, "No DB" );
    } elsif ( $args{ServiceCredentialID} ) {
        Common::Log::Debug("In the elseif");
        return $self->_initFromHash( $args{ServiceCredentialID} );
    } else {
        Common::Log::Debug("In the else");
        return $self->_initProperties( {} );
    }
}

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

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

    my $name = Support::DB::Item::BookPubServiceCredential->GetServiceCredentialByID( service_credential_id => $serviceCredentialID );

    my $props = {
        service_credential_id => $name->{service_credential_id},
        service_name          => $name->{service_name},
        username              => $name->{username},
        password              => $name->{password},
        api_key               => $name->{api_key},
        status                => $name->{status},
        start_date            => $name->{start_date},
    };

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

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

    Common::Log::Debug("ID: $dbItem->service_credential_id");

    my $props = {
        service_credential_id => $dbItem->{service_credential_id},
        service_name          => $dbItem->{service_name},
        username              => $dbItem->{username},
        password              => $dbItem->{password},
        api_key               => $dbItem->{api_key},
        status                => $dbItem->{status},
        start_date            => $dbItem->{start_date},
    };

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

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

    $self->{ServiceName} =
      Common::FormObject::Scalar::String->new( value => $prop->{service_name} );

    $self->{ServiceCredentialID} =
      Common::FormObject::Scalar::String->new( value => $prop->{service_credential_id} );

    $self->{Username} =
      Common::FormObject::Scalar::String->new( value => $prop->{username} );

    $self->{Password} =
      Common::FormObject::Scalar::String->new( value => $prop->{password} );

    $self->{ApiKey} =
      Common::FormObject::Scalar::String->new( value => $prop->{api_key} );

    $self->{Status} =
      Common::FormObject::Scalar::String->new( value => $prop->{status} );

    $self->{StartDate} =
      Common::FormObject::Scalar::String->new( value => $prop->{start_date} );

    return $self;
}

sub save {
    my $self = shift;

    my $dbItem =
      Support::DB::Item::BookPubServiceCredential->GetServiceCredentialByID( service_credential_id => $self->ServiceCredentialID )
      if ( $self->ServiceCredentialID );

    $dbItem = Support::DB::Item::BookPubServiceCredential->Create() unless ($dbItem);

    $dbItem->username( $self->Username );
    $dbItem->password( $self->Password );
    $dbItem->api_key( $self->ApiKey );
    $dbItem->status( $self->Status );
    $dbItem->start_date( $self->StartDate );

    $dbItem->save();

    $self->_initFromDBItem($dbItem);

}

1;
