#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package BookPub::User::Form;

use strict;
use warnings;

use lib '/app/tools/appuser/lib';
use AppUser::User::User;
use AppUser::DB::Item::User;
use AppUser::DB::Item::AccessLevel;
use AppUser::User::AccessLevelList;

use lib '/app/tools/bookpub/lib';
use BookPub::Catalog::ImprintList;
use BookPub::Catalog::PublisherList;

use lib '/app/tools/rps/lib';
use RPS::CountryList;

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

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

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

    my $userID = $args{userID};

    # Stash the user's access level away - I will want it later for validation.
    #
    my $accessLevel = $args{accessLevel};
    $self->{_accessLevel} = $accessLevel;

    $self->{AppUser} = AppUser::User::User->new( userID => $userID );
    $self->{CountryList} = RPS::CountryList->new();

    $self->{ImprintList}   = BookPub::Catalog::ImprintList->new();
    $self->{PublisherList} = BookPub::Catalog::PublisherList->new();

    # If we don't have an access level, why show an access level list?
    #
    if ( defined $accessLevel ) {
        $self->{AccessLevelList} = AppUser::User::AccessLevelList->new();
    }

    # we'll create our own user list for the primary/secondary contact section
    #
    #my $coll = AppUser::DB::Item::User->GetByAccessLevel(AppUser::User::UserAccess::kRSAdmin(), #AppUser::User::UserAccess::kRSRep());
    #my $href;
    #while($coll->hasNext)
    #{
    #	my $dbItem = $coll->next;
    #	push @{$href->{Contact}}, AppUser::User::User->new(_dbItem => $dbItem, loadSubs => 0);
    #}
    #$self->{ContactList} = $href;

    return $self;
}

sub getUserID {
    my ($self) = @_;

    return $self->{AppUser}->UserID();
}

sub save {
    my ($self) = @_;

    my $new = 1;
    if ( $self->getUserID() ) {
        $new = 0;
    }

    $self->{AppUser}->save();

    if ($new) {
        $self->{AppUser}->SendNewUserEmail();
    }
}

sub saveAsDefault {
    my ($self) = @_;

    $self->{AppUser}->saveAsDefault();
}

sub validate {
    my ($self) = @_;

    return 0 if !$self->{AppUser}->validate();

    # Only RSAdmins can create other RSAdmins.
    #
    my $objLevel    = $self->{AppUser}->AccessLevel();
    my $accessLevel = $self->{_accessLevel};
    if (   ( AppUser::DB::Item::AccessLevel::kRSAdmin == $objLevel )
        && ( AppUser::DB::Item::AccessLevel::kRSAdmin != $accessLevel ) ) {
        return 0;
    }

    return 1;
}

###
1;    #
###

