// first JDBC
import java.util.*; 
import java.util.zip.*; 

import java.text.*;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;



public class ThankYouServlet3 extends HttpServlet 
	{
	 public void doPost(HttpServletRequest req, HttpServletResponse res )  
		{
	
	
			DBAV2 db = new DBAV2();

			db.makeStatement();


			String query;
			ResultSet rs;
			String shippingmsg2weeks = "The product you are ordering is being back-ordered and will \nship within two weeks";
			String shippingmsg2days = "The product you are ordering is in stock and will \nship within two business days";
			String freebies;
			String url = "/servlet/SorryServlet";

			
	try
		 {	






			// retrieve  cookie

			String cID = null;

			Cookie [] cookies = req.getCookies();
			
			for (int i=0; i< cookies.length ; i++ )
			{
				String temp = cookies[i].getName();

				if (temp.equals("corpId"))
				{
					cID = cookies[i].getValue();
				}
			} // end of cookie loop




			// retrieve the session

			HttpSession session = req.getSession(true);

			res.setContentType("text/html");

			// get a handle to the output stream via the response

			PrintWriter out = new PrintWriter (res.getOutputStream(), true);

			// format the html output

			

			



 				String orderphone       = req.getParameter("orderTelephone");
				String orderfname      = req.getParameter("orderFname");
				String orderlname      = req.getParameter("orderLname");
				String ordercompany    = req.getParameter("orderCompany");
				String orderaddress1   = req.getParameter("orderAddress1");
				String orderaddress2   = req.getParameter("orderAddress2");
				String ordercity       = req.getParameter("orderCity");
				String orderstate      = req.getParameter("orderState");
				String orderzip        = req.getParameter("orderZip");

				String ordertotal	   = req.getParameter("orderTotal");
				String orderstatus	   = req.getParameter("orderStatus");
				String orderdiscount   = req.getParameter("orderDiscount");
				String orderdiscountpct   = req.getParameter("orderDiscRate");
				
				String ordercreditcard = req.getParameter("orderCreditcard");
				String orderMM         = req.getParameter("orderMM");
				String orderYYYY       = req.getParameter("orderYYYY");
				String ordercardnumber = req.getParameter("orderCardnumber");

				 
				

				double orderTotalAmt = Double.parseDouble(ordertotal);
				double orderTotalDisc = Double.parseDouble(orderdiscount);
				int orderDiscRate = Integer.parseInt(orderdiscountpct);


				NumberFormat myNewNum = NumberFormat.getNumberInstance();
				myNewNum.setMaximumFractionDigits(2);
				myNewNum.setMinimumFractionDigits(2);
		 
				String resultNum = myNewNum.format(orderTotalAmt);
				orderTotalAmt = Double.parseDouble(resultNum);

				
				resultNum = myNewNum.format(orderTotalDisc);
				orderTotalDisc = Double.parseDouble(resultNum);

				// global variables  credit limit for each credit card 

				HashMap f = (HashMap)getServletContext().getAttribute( "creditLimit" );


				boolean creditOK = false;
				boolean productOK = false;
				boolean ordercomplete = false;


		 		if (orderTotalAmt <= 500)
				{
				
				//hashtable only take object number
			
				
				 
			
				// perform a get on the hashmap, may or may not be successful
				// creditlimit will contain a object or null

				Double creditlimit  = (Double)  f.get(ordercardnumber);

				creditOK = true;
		

				if ( creditlimit !=  null)
				{
					// found some purchases done for the day with the same credit card number
					// pull out info and add up the total
					 
					
					double creditOfToday = creditlimit.doubleValue();
					creditOfToday = creditOfToday + orderTotalAmt;

					//  check the limit

					if (creditOfToday >= 500)

					{
					RequestDispatcher disp = getServletContext().getRequestDispatcher(url);

					disp.forward(req, res);
					creditOK = false;
					}
					else
					{
					creditlimit =  new Double(creditOfToday);
					f.put(ordercardnumber, creditlimit);
					}
				}
				else
				
				{
					// change orderTotalAmt to a Double wrapper object	
					Double purchaseAmt = new Double(orderTotalAmt);
					f.put(ordercardnumber, purchaseAmt);
				}	// end of if  found some purchase with the same credit card number
				 

			if (creditOK)
			{
			
			out.println("<html> <head> <title> Thank You </title>");

			out.println("<link rel='stylesheet' type='text/css' href='../book.css' />");

			 
			out.println("</head>");

			out.println("<body align='center'>");



 
			out.println("<h1>");


			//out.println("<image src='../images/logo.gif'>");


			out.println("<image src='../images/BookNookStack.gif' width='213' height='96' border=0 align='left'>");
			out.println("Your Purchase Is<br />");
			out.println("Complete ...</h1>");
			out.println("<image src='../images/BookNookStar.gif' width='85' height='34' border=0 alt='' >");
			out.println("<p>");
			out.println("Thank you for making your purchase at Book Nook.");
			out.println("</p>");


			out.println("<div id='orderidarea'>");


			// ready to start update the database

			db = new DBAV2();

			db.makeStatement();
			
	
		
			// Process Customer and get customer id 
	

			Customer c = new Customer();
			c.setDB(db);

			// USE first name and last name to retrieve customer id

			c.setFname(orderfname); 
			c.setLname(orderlname);
			c.setCompany(ordercompany);
			c.setAddress1(orderaddress1);
			c.setAddress2(orderaddress2);
			c.setCity(ordercity);
			c.setState(orderstate);
			c.setZip(orderzip);
			 
 			c.setPhone(orderphone);

//			c.setFax(orderfax);

			boolean customerOK = c.getCustomerId();

			int custid = c.getCustId();


			// add  credit card info to creditinfo table

			CreditInfo ci = new CreditInfo();
			ci.setDB(db);

			ci.setCustId(custid);

			ci.setCreditCardType(ordercreditcard);

			ci.setCreditNumber(ordercardnumber);
			ci.setCreditMM(orderMM);
			ci.setCreditYY(orderYYYY);



			
			boolean creditInfoOK =	ci.setCreditInfo();

			String ordercreditcardNew = ci.getCreditcardtype( );

	

			// Process Corporate account  (add total to annual sales)
				

			 
			CorporateAccount Co = new CorporateAccount();

			
			Co.setDB(db);
			Co.setCorpId(cID);






			Co.setTotalSales(orderTotalAmt);

			boolean CorporateOK = Co.setCorporateAccount( );






			// Process orders

			// discount and freebie are in Order class

		 
			Map myOrders = (Map) session.getAttribute("cart");


				
			

			Order o = new Order();

			o.setDB(db);
			
			o.setCustId(custid);

			o.setCid(cID);

			o.setCardtype(ordercreditcardNew);

			o.setMyOrders(myOrders);
			
			 
			o.setTotalcost(orderTotalAmt);



			o.setDiscountAmount(orderTotalDisc);


			o.setDiscountPct(orderDiscRate);

			
 
 			boolean orderOK = o.setOrder();
			int orderid = o.getOrderId();
			  
			





			productOK = o.getProductOK(); 


			String statusIn = o.getStatus();
				
				
				
				
	 

			 








			

			if ( (productOK) && (customerOK) && (orderOK) && (creditInfoOK))
			{
			 	out.println("Your Order Number is : " + orderid);
				 

				out.println("</div>");
				out.println("<br />");
				out.println("<br />");
				out.println("<div id='deliverymsg'>");



				 


				if (statusIn.equals("1"))
				{
				out.println(shippingmsg2days);
				}
				else
				{
				out.println(shippingmsg2weeks);
				}
				out.println("</div>");

				// ready to close db and commit
				ordercomplete = true;










				db.shutDown();


			} // end of if update sussessfully

			else

			 {
				out.println("<h1> System problem, please call customer support"); 
				out.println("<br /> Attention: Your order did not go through</h1>"); 
			 
			 }

			
			// this was set by order.java when the customer place the 100th order
			
			freebies = o.getFreebies();

			out.println("<br /><br />");
			out.println(freebies);
			
			out.println("<br /><br /><br /><br />");				 
			out.println("<input type='button' name='searchbutton' value='New Search'  onclick= 'location.href=\"../productlook.html\"' />");
					 
			out.println("<input type='button' name='backbutton' value='Back' onclick='history.back();' />");
			  

			



			out.println("</body></html>");

			System.out.println("first name = " + orderfname);
			System.out.println("last name = " + orderlname);
			System.out.println("I got the custid = " + custid);
			System.out.println("I got the orderid = " + orderid);





		
		} // end of creditOk

		} // end of check if orderTotalAmt is less than 500
		else
		{
				// purchase amt over 500
				RequestDispatcher disp = getServletContext().getRequestDispatcher(url);

				disp.forward(req, res);


		}


		if (ordercomplete)
		{
			// orders will be gone
			Map myOrders = (Map) session.getAttribute("cart");
			myOrders = null;
			session.setAttribute("cart", myOrders);
		} // end of wipe out myOrders
		 


		

		} // end of try

		
		catch (IOException ie)
		 {
			 System.out.println("A IO Exception" +  ie.getMessage());
			 ie.printStackTrace();
		 }
		catch (Exception e)
		 {
			 System.out.println("An Exception" +  e.getMessage());
			 e.printStackTrace();
		 }
		
	 
		} // end doPost

	 public void doGet(HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException
		{
			doPost(req, res);

		} // end doGet
	}
 
	 