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

use lib '/app/tools/common/lib';
use RSApache::Response::XSLT;
use RSApache::DBSession;

use lib '/app/tools/appuser/lib';
use AppUser::User::Form;
use AppUser::User::Command::Show;
use AppUser::DB::Item::User;
use AppUser::DB::Item::UserTerms;

use lib '/app/tools/rps/lib';
use RPS::Command;
use base 'RPS::Command';
use RPS::DB::Item::Session;

sub cmd  { return "terms"; }
sub area { return "user"; }

use constant kTemplate => '/app/tools/appuser/templates/user/index.xsl';

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

    # Give any inherited methods the first crack at this.
    # (This checks for login and basic access permissions).
    #
    my $response = $self->SUPER::execute();
    return $response if $response;

    my $userID = Common::RSApp::GetActiveUserID();
    my $user = AppUser::DB::Item::User->Lookup( user_id => $userID );

    my $redirect = "/";

    if ( $self->getParam('formSubmit') ) {
        if ( $self->getParam('dontagree') == 1 ) {
            $redirect = "/rps/logout";
        } else {

            # Add an entry to the user terms table
            #
            AppUser::DB::Item::UserTerms->Create( user_id => $userID );

            # And update the session table
            #
            my $sessionID = RSApache::DBSession::GetSessionIDFromCookie();
            RPS::DB::Item::Session->UpdateTerms($sessionID);

            if ( $self->getParam('redirect') ) {
                $redirect = $self->getParam('redirect');
            }
        }

        my $redirectResponse = RSApache::Response::Redirect->new($redirect);
        return $redirectResponse;
    } elsif ( AppUser::DB::Item::UserTerms->CheckForExistingTerms($userID) > 0 ) {

        # User has already agree to this version of the terms, so redirect them.
        #
        my $redirectResponse = RSApache::Response::Redirect->new($redirect);

        # And update the session table, just to make sure they are in sync.
        #
        my $sessionID = RSApache::DBSession::GetSessionIDFromCookie();
        RPS::DB::Item::Session->UpdateTerms($sessionID);

        return $redirectResponse;
    }

    #  !!! There is absolutely no reason to present this Form object
    #  my $form = AppUser::User::Form->new(userID => $userID, accessLevel => $self->_getUser()->AccessLevel());

    #  $self->{xml}{Form} = $form;

    $response = RSApache::Response::XSLT->new( $self->{xml}, kTemplate );
    return $response;
}

1;

