package org.projectapollo.demo;

import apollo.*;
import apollo.Log.*;
import apollo.Template.*;
import apollo.Storable.*;
import apollo.Session.*;
import org.projectapollo.demo.Storable.*;
import org.projectapollo.demo.Home.LeftFrame.*;
import java.util.*;
 
 
public class CreateAccountHandler implements PageHandler {
    private Vector AS;
    private AcceptClause displayEntry;
    private AcceptClause createAccount;
    private AcceptClause createAccountIncomplete;
    private ManagerTracker MT;
    private String FQUID;
    public CreateAccountHandler(ManagerTracker MT, String fquid, PageBroker PB) throws TemplatePageException {
        this.MT=MT;
        this.FQUID=fquid;
        MT.getPM().registerTemplatePage(FQUID,
new TemplatePage(MT,this, "createaccount.html"));
 
        AS =
new Vector();
        displayEntry=
new AcceptClause("DisplayEntry");
        createAccount=
new AcceptClause("CreateAccount");
        createAccount.addAcceptClause(AcceptClause.STRING,
"Create", AcceptClause.REQUIRED);
        createAccount.addAcceptClause(AcceptClause.STRING,
"UserID", AcceptClause.REQUIRED);
        createAccount.addAcceptClause(AcceptClause.STRING,
"Password", AcceptClause.OPTIONAL);
        createAccount.addAcceptClause(AcceptClause.STRING,
"FirstName", AcceptClause.OPTIONAL);
        createAccount.addAcceptClause(AcceptClause.STRING,
"LastName", AcceptClause.OPTIONAL);
        createAccount.addAcceptClause(AcceptClause.STRING,
"EmailAddress", AcceptClause.OPTIONAL);
 
        createAccountIncomplete =
new AcceptClause("CreateAccountIncomplete");
        createAccountIncomplete.addAcceptClause(AcceptClause.STRING,
"Create", AcceptClause.REQUIRED);
        AS.addElement(createAccount);
        AS.addElement(createAccountIncomplete);
        AS.addElement(displayEntry);
    }
 
    public String getFQUID() {
        return this.FQUID;
    }

    public HTTPResponse handleRequest(TransactionTracker TT, String fquid, HTTPRequest req, WebSession thisSession) throws ApolloException {
        EntryAssertionManager EAM =
new EntryAssertionManager(MT, AS);
        EAM.evaluate(req);
         //display user first name next to 'welcome'
        //get user obj from session
         Hashtable RT = new Hashtable();
        RT.put(
"JSAlert", new Boolean(false));
        if (EAM.isAccept(createAccount)) {
            User u = User.loadInstance(MT,
new Object[] {EAM.getString("UserID")});
            if (u!=null) {
                RT.put(
"JSAlert", new Boolean(true));
                RT.put(
"JSMessage", "That account already exists!");
            }
else {
                u =
new User(EAM.getString("UserID"), EAM.getString("FirstName"), EAM.getString("LastName"),EAM.getString("Password"), EAM.getString("EmailAddress"));
                u.insert(MT);
                RT.put(
"JSAlert", new Boolean(true));
                RT.put(
"JSMessage", "You may now log in as "+u.getUserID());
                return MT.getPM().handleRequest(TT, "",req,null);
            }
        }
        if (EAM.isAccept(createAccountIncomplete)) {
            RT.put(
"JSAlert", new Boolean(true));
            RT.put(
"JSMessage", "You did not fill in the entire form!");
        }
 
        return MT.getPM().getPage(FQUID).render(RT,thisSession);
    }
// end render
 
}