//Case Study 6 Shopping Cart Servlet for Multiple Order Session
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ShoppingCartServlet extends HttpServlet{
 private static void displayCartList (ServletOutputStream out, Vector CartList)
	  throws IOException{
	    out.println("<html><head><title>Shopping Cart Contents</title></head>");
		out.println("<body bgcolor= '#63C6DE'>");
        out.println("<IMG align='left' src='/BookNookStack.gif'>");
	    out.println("<h1>Shopping Cart Contents...</h1><br>");
	    out.println("<IMG src='/BookNookStar.gif'><br>");
	    out.println("<center><IMG src='/BookNookLogo.gif'>");
		out.println("<table border=3><tr>");
		out.println("<th>Title</th><th>Author</th><th>ISBN</th><th>Price</th>");
		out.println("<th>Quantity</th><th>Remove Item</th></tr><tr>");
		int book = 0;
		int position = 0;
        for (int i =0;i<CartList.size();i++){
			position++;
			if(position==1){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==2){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==3){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==4){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==5){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
				out.println("<td><input type = \"button\" value = \"Remove\"</td></tr><tr>");
				position = 0;
				book++;
			}
	     }//for
		 out.println("</tr></table>");
		 out.println("<FORM name=\"todo\" method=\"POST\" action=\"http://localhost:8080/servlet/ShoppingCartServlet/Checkout\">");
		 out.println("<input type=\"hidden\" name=\"operation\" value=\"Checkout\">");
		 out.println("<center><input type = \"submit\" value=\"Checkout\">");
         out.println("<input type = \"button\" value=\"Product Search\" onClick=\"history.go(-2)\"></form>");
		 out.println("<input type = \"button\" value=\"Welcome Page\" onClick=\"location.href='C:/CaseStudy4-5-6/welcome.htm'\">");
 }//end display CartList
 
		private static void Checkout(ServletOutputStream out, Vector CartList)throws IOException{
			out.println("<html><head><title>Checkout Form</title></head><body bgcolor='#63C6DE'>");
		//Order page with customer information
		out.println("<h2><A NAME=\"Your\">Your</A> Order contains the following items:</h2><br>");
		out.println("<table border=3><tr>");
		out.println("<th>Title</th><th>Author</th><th>ISBN</th><th>Price</th>");
		out.println("<th>Quantity</th><th>Ext. Cost</th></tr><tr>");
		int book = 0;
		int position = 0;
		int quantity=0;
		double cost=0;
		double extCost=0;
		double totCost=0;
        for (int i =0;i<CartList.size();i++){
			position++;
			if(position==1){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==2){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==3){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==4){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
				cost=Double.valueOf(CartList.elementAt(i).toString()).doubleValue();
			}
			if(position==5){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
				quantity=Integer.valueOf(CartList.elementAt(i).toString().trim()).intValue();
				extCost=cost*quantity;
				totCost=extCost+totCost;
				out.println("<td>$"+extCost+"</td></tr><tr>");
				position = 0;
				book++;	
			}	  
	     }//for
	    out.println("</tr></table><br>");
		out.println("<h2>The Total Cost For Your Order is: $"+totCost+"</h2><br>");
		out.println("<h3>Please enter the information below.  All fields (except Company) are<br>");
		out.println("required to successfully place an Order.</h3>");
	out.println("<FORM NAME=FORM1  METHOD=POST  onSubmit=\"return check();\"  ACTION='http://localhost:8080/servlet/ShoppingCartServlet'>");
	out.println("<i>Name(F,L):&nbsp;&nbsp;<input type='text' name='fname' size=15>");
    out.println("<input type='text' name='lname' size=15><br>");
	out.println("Company:&nbsp;&nbsp;&nbsp;&nbsp;");
	out.println("<input type='text' name='company' size=33><br>");
	out.println("Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
	out.println("<input type='text' name='address' size=33><br>");
	out.println("City:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type='text' name='city' size=20>&nbsp;");
	out.println("State: <input type='text' name='state' size=3>&nbsp;");
	out.println("Zip: <input type='text' name='zip' size = 12><br>");
	out.println("Credit Type: <select name='creditcard' size=1><br>");
	out.println("<option>Mastercard<option>American Express<option>Discover</select>");
	out.println("Card Number: <input type='text' name='cardnumber' size=18><br>");
	out.println("Expires:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type='text' name='expires' size=10></i><br><br>");
	out.println("<input type=\"hidden\" name=\"operation\" value=\"Confirm\">");		
	out.println("<input type='reset'  value='Clear Form'>");
    out.println("<input type=\"submit\" name=\"order\" value=\"Place Order\" >");
	//out.println("<input type=\"hidden\" name=\"operation\" value=\"view\"></input>");
	out.println("<input type = \"button\"  value=\"View Cart\" onclick=\"history.go(-1)\"></input>");
	//FORM VALIDATION, NINE MILES to the RIGHT
	out.println("<script> function check(){ if(document.FORM1.fname.value==\"\"){ alert(\"Enter First Name\");document.FORM1.fname.focus(); return false; }  if(document.FORM1.lname.value==\"\"){alert(\"Enter Last Name!\");document.FORM1.lname.focus();return false;} if(document.FORM1.address.value==\"\"){alert(\"Enter Address!\");document.FORM1.address.focus();return false;} if(document.FORM1.city.value==\"\"){alert(\"Enter City!\");document.FORM1.city.focus();return false;} if(document.FORM1.state.value==\"\"){alert(\"Enter State!\");document.FORM1.state.focus();return false;} if(document.FORM1.zip.value==\"\"){alert(\"Enter Zip!\");document.FORM1.zip.focus();return false;} if(document.FORM1.cardnumber.value==\"\"){alert(\"Enter Card Number!\");document.FORM1.cardnumber.focus();return false;} if(document.FORM1.expires.value==\"\"){alert(\"Enter Expiration Date!\");document.FORM1.expires.focus();return false;}     }</script>");
    out.println("</form>");
    out.println("<input type = \"button\" name=\"previous\"  value=\"Previous Page\" onClick=\"history.go(-1)\">");
    out.println("<input type=\"button\" value=\"Product Search\" onClick=\"location.href='C:/CaseStudy4-5-6/ProductLookupPage.htm'\">");
    out.println("<input type = \"button\" value=\"Welcome Page\" onClick=\"location.href='C:/CaseStudy4-5-6/welcome.htm'\">");
	out.println("</body></html>");
		}//end of Checkout

		private static void Confirm(HttpServletRequest req,ServletOutputStream out, Vector CartList)
			throws IOException{		
		  String operation = req.getParameter ("operation");
		  String Title = req.getParameter("title");
		  String Author= req.getParameter("author");
		  String ISBN = req.getParameter("isbn");
		  String Price = req.getParameter("cost");
		  String Quantity = req.getParameter("quantity");
		String fname=req.getParameter("fname").trim();
		String lname=req.getParameter("lname").trim();
		String company=req.getParameter("company").trim();
		String address=req.getParameter("address").trim();
		String city=req.getParameter("city").trim();
		String state=req.getParameter("state").trim();
		String zip=req.getParameter("zip").trim();
		String creditcard=req.getParameter("creditcard").trim();
		String expires=req.getParameter("expires").trim();
		String cardnumber=req.getParameter("cardnumber").trim();
		//Confirmation page with books and Customer Info
		out.println("<html><head><title>Order Confirmation</title></head><body bgcolor='#63C6DE'>");
        out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"CSS.css\">");
		out.println("<h2><i>Please review the following details of your order carefully<br>");
		out.println("before confirming your order:<br><br>");
		out.println("<b>Product Information</b><br>");
		//carry over table of Ordered Books
		out.println("<table border=3><tr>");
		out.println("<th>Title</th><th>Author</th><th>ISBN</th><th>Price</th>");
		out.println("<th>Quantity</th><th>Ext. Cost</th></tr><tr>");
		int book = 0;
		int position = 0;
		int quantity=0;
		double cost=0;
		double extCost=0;
		double totCost=0;
        for (int i =0;i<CartList.size();i++){
			position++;
			if(position==1){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==2){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==3){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
			}
			if(position==4){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
				cost=Double.valueOf(CartList.elementAt(i).toString()).doubleValue();
			}
			if(position==5){
				out.println("<td>"+CartList.elementAt(i).toString()+"</td>");
				quantity=Integer.valueOf(CartList.elementAt(i).toString().trim()).intValue();
				extCost=cost*quantity;
				totCost=extCost+totCost;
				out.println("<td>$"+extCost+"</td></tr><tr>");
				position = 0;
				book++;	
			}	  
	     }//for
	    out.println("</tr></table><br>");
		out.println("<h2>The Total Cost For Your Order is: $"+totCost+"</h2><br>");
		out.println("<h3><b>Customer Information:</b><br><br>");	
		//retrieve customer information
		out.println("   Name: "+fname+" "+lname+"<br>");
		out.println("Company: "+company+"<br>");
		out.println("Address: "+address+"<br>");
		out.println("   City: "+city+" <br>");
		out.println("  State: "+state+"<br");
		out.println("    Zip: "+zip+"<br>");
		out.println("    Credit Type: "+creditcard+"<br>");
		out.println("Expiration Date: "+expires+"<br>");
		out.println("    Card Number: "+cardnumber+"</h3><br>");
		out.println("<h2>The product you are ordering is being back-ordered and will<br>ship within two weeks<br>");
		out.println("<FORM NAME=FORM2  METHOD=POST   ACTION=\"http://localhost:8080/servlet/ShoppingCartServlet\">");
		out.println("<input type=\"hidden\" name=\"operation\" value=\"ThankYou\"></input>");
		out.println("<input type='submit' name='ThankYou'  value='Place Order'></input>");
		out.println("<input type='button' value='Update Order Details' onClick='history.go(-1)'></input>");
		out.println("</FORM></body></html>");
		}//end Confirm

		  public void doGet (HttpServletRequest req, HttpServletResponse res){
	  try{
		  res.setContentType("text/html");
		  ServletOutputStream out = res.getOutputStream();
	  HttpSession session = req.getSession (true);//Creates session if one doesn't exist
	  if(session.isNew() ){
	  session.putValue ("CartList", new Vector () );
	  }
 
	  Vector CartList = (Vector) session.getValue("CartList");
	  try{
		  String operation = req.getParameter ("operation");
		  String Title = req.getParameter("title");
		  String Author= req.getParameter("author");
		  String ISBN = req.getParameter("isbn");
		  String Price = req.getParameter("cost");
		  String Quantity = req.getParameter("quantity");
		  int number = 1;
		
		  if(operation.equalsIgnoreCase ("Add") ){
			  System.out.println("Adding: " );
		      CartList.insertElementAt (Quantity,number -1);
			  CartList.insertElementAt (Price, number -1);
			  CartList.insertElementAt (ISBN, number -1);
			  CartList.insertElementAt (Author, number -1);
			  CartList.insertElementAt(Title, number -1);	
			  displayCartList (out, CartList);
		    }//endif
	
			if(operation.equalsIgnoreCase("Checkout")){
				System.out.println("Checkout: ");
				Checkout (out, CartList);
			}//endif

			if(operation.equalsIgnoreCase("Confirm")){
				System.out.println("Confirm: ");
				Confirm (req, out, CartList);
			}//endif
			if(operation.equalsIgnoreCase("ThankYou")){
				System.out.println("ThankYou: ");
				ThankYou (req, out);
			}//endif
			if(operation.equalsIgnoreCase("view")){
				displayCartList (out, CartList);
			}//endif

	  } catch(Exception e){
		  System.err.println (e.getMessage() );
	  }
		out.println("</body></html>");

	  }catch(IOException e){
		  System.err.println(e.getMessage() );
	  }  }//end doGet

	private static void ThankYou (HttpServletRequest req, ServletOutputStream out)
		throws IOException{
	  out.println("<html><head><title>Book Nook Order Accepted</title></head><body bgcolor='#63C6DE'>");
	  out.println("<IMG align='left' src='/BookNookStack.gif'>");
	  out.println("<h1><A NAME=\"Order\">Order Accepted...</A></h1><br>");
	  out.println("<IMG src='/BookNookStar.gif'><br>");
	  out.println("<center><IMG src='/BookNookLogo.gif'></center><br>");
	  out.println("<h3><i>Thank you for making your purchase at Book Nook.</A><br>");
	  out.println("Your Order Number is: 217  <br> ");
	  out.println("Your order will ship within two business days.<br>");
	  out.println("May we make a suggestion?");
	  out.println("You may also want to consider the following selection:<br>");
	  out.println("Software Runaways by Robert L. Glass<br><br>");
	  out.println("<input type = \"button\" value=\"Welcome Page\" onClick=\"location.href='C:/CaseStudy4-5-6/welcome.htm'\">");  
	  out.println("<input type='button' value='New Search' onclick=\"location.href='C:/CaseStudy4-5-6/ProductLookupPage.htm'\">");  
      out.println ("</i></h3></body></html>");
	}//end ThankYou

  public void doPost(HttpServletRequest req, HttpServletResponse res){
	  doGet (req, res);
}}//end ShoppingCartServlet

	
	  

	
	  