package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/CRUDDatabase")
public class CRUDDatabase extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request,
	    HttpServletResponse response) throws ServletException, IOException {

	response.setContentType("text/html;charset=utf-8");
	request.setCharacterEncoding("utf8");
	
	try {
	    Class.forName("com.mysql.jdbc.Driver");
	} catch (ClassNotFoundException e) {
	}

	PrintWriter out = response.getWriter();
	out.println("<html>");
	out.println("<head>");
	String title = "CRUD Database page";
	out.println("<title>" + title + "</title>");
	out.println("<link rel='stylesheet' type='text/css' href='round.css'>");
	out.println("</head>");
	out.println("<body bgcolor=F8F8F8>");
	out.println("<h1>" + title + "</h1>");

	// Сессия начало
	HttpSession session = request.getSession(true);
	String savedLastName = (String) session.getAttribute("savedLastName");
	if ((savedLastName != null) && (savedLastName != "")) {
	    String heading;
	    Integer accessCount = new Integer(0);
	    if (session.isNew()) {
		heading = "Welcome, Newcomer";
	    } else {
		heading = "Welcome Back";
		Integer oldAccessCount = (Integer) session
			.getAttribute("accessCount");
		if (oldAccessCount != null) {
		    accessCount = new Integer(oldAccessCount.intValue() + 1);
		}
	    }
	    session.setAttribute("accessCount", accessCount);
	    // Сессия конец

	    // Сессия отображение начало
	    out.println("<hr>");
	    out.println("<h1 align=center>" + heading + "</h1>\n");
	    out.println("<h2>Information on Your Session:</h2>\n");
	    out.println("<table cellpadding=3 cellspacing=3 align=center bgcolor=9AFF92>\n");
	    out.println("<tr bgcolor=3CE022>\n");
	    out.println("<th>Info Type<th>Value\n");
	    out.println("<tr>\n");
	    out.println("<td>Фамилия\n");
	    out.println("<td>" + session.getAttribute("savedLastName") + "\n");
	    out.println("<tr>\n");
	    out.println("<td>ID\n");
	    out.println("<td>" + session.getId() + "\n");
	    out.println("<tr>\n");
	    out.println("<td>Creation Time\n");
	    out.println("<td>" + new Date(session.getCreationTime()) + "\n");
	    out.println("<tr>\n");
	    out.println("<td>Time of Last Access\n");
	    out.println("<td>" + new Date(session.getLastAccessedTime()) + "\n");
	    out.println("<tr>\n");
	    out.println("<td>Number of Previous Accesses\n");
	    out.println("<td>" + accessCount + "\n");
	    out.println("</table>\n");
	    out.println("<hr>");
	}
	// Сессия отображение конец

	out.println("<br>");
	out.println("<h2>Database Operations</h2>");
	out.println("<br>");
	out.println("<form method=post>");
	out.println("<input type=submit name=action value=\"Add Database\">");
	out.println("<input type=submit name=action value=\"Drop Database\"> ");
	out.println("</form>");
	out.println("<hr>");
	out.println("<br>");
	out.println("<h2>Table Operations</h2>");
	out.println("<br>");
	out.println("<form method=post>");
	out.println("<input type=submit name=action value=\"Add Table\">");
	out.println("<input type=submit name=action value=\"Drop Table\"> ");
	out.println("</form>");
	out.println("<hr>");
	out.println("<br>");
	out.println("<h2>Add New Record</h2>");
	out.println("<br>");
	out.println("<form method=post>");
	out.println("<input type=hidden name=action value=add> ");
	out.println("<input type=text name=record SIZE=14> ");
	out.println("<input type=submit value=Add>");
	out.println("<input type=reset>");
	out.println("</form>");
	out.println("<hr>");
	out.println("<br>");
	out.println("<br>");

	String id = request.getParameter("id");
	String record = request.getParameter("record");
	String action = request.getParameter("action");
	String sql;
	StringBuffer Records = new StringBuffer(2048);

	// Open the Records table
	try {
	    Connection con2 = DriverManager.getConnection(
		    "jdbc:mysql://localhost:3306/mysql", "root", "");
	    Statement s2 = con2.createStatement();
	    ResultSet rs;
	    if (action != null && action.equals("Add Database")) {
		sql = "CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8 COLLATE utf8_general_ci";
		s2.executeUpdate(sql);
		out.println("Database is created Successfully<p>");
		s2.close();
		con2.close();
	    }
	    Connection con = DriverManager
		    .getConnection(
			    "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8",
			    "root", "");
	    Statement s = con.createStatement();
	    if (action != null && action.equals("Drop Database")) {
		sql = "DROP DATABASE IF EXISTS mydb";
		s.executeUpdate(sql);
		out.println("Database is droped Successfully<p>");
	    }

	    if (action != null && action.equals("Add Table")) {
		sql = "CREATE TABLE IF NOT EXISTS Records (`recordID` int(11) "
			+ "NOT NULL AUTO_INCREMENT, `recordName` tinytext "
			+ "NOT NULL, PRIMARY KEY (`recordID`)) ENGINE=MyISAM  "
			+ "DEFAULT CHARSET=utf8 AUTO_INCREMENT=6";
		s.executeUpdate(sql);
		out.println("Table is created Successfully<p>");
	    }
	    if (action != null && action.equals("Drop Table")) {
		sql = "DROP TABLE IF EXISTS Records";
		s.executeUpdate(sql);
		out.println("Table is droped Successfully!");
	    }

	    if (action != null && action.equals("add")) {
		sql = "SELECT recordName FROM Records WHERE recordName='"
			+ record + "'";
		rs = s.executeQuery(sql);
		if (!rs.next()) {
		    sql = "INSERT INTO Records (recordName) VALUES ('" + record
			    + "')";
		    s.executeUpdate(sql);
		} else
		    out.println("' " + record
			    + " ' is already in the database<p>");
	    } else if (action != null && action.equals("delete")) {
		sql = "DELETE FROM Records WHERE recordID=" + id;
		s.executeUpdate(sql);
	    } else if (action != null && action.equals("update")) {
		sql = "UPDATE Records SET recordName='" + record + "'"
			+ " WHERE recordId=" + id;
		s.executeUpdate(sql);
	    }

	    sql = "SELECT recordID, recordName FROM Records ORDER BY recordName ASC";
	    rs = s.executeQuery(sql);

	    // Now list all Records plus the DELETE and UPDATE buttons
	    out.println("<div id=round>");
	    out.println("<b class=rtop><b class=r1></b><b class=r2></b><b class=r3></b><b class=r4></b></b>");
	    out.println("<b>Table Records</b>");
	    out.println("<br>");
	    out.println("<table cellpadding=3 cellspacing=3 bgcolor=9AFF92>");
	    out.println("<tr bgcolor=3CE022>");
	    out.println("<th>Record</th><th>Action</th>");
	    out.println("</tr>");
	    while (rs.next()) {
		id = rs.getString(1);
		record = rs.getString(2);

		out.println("<tr>");
		out.println("<td>");
		out.println("<form method=post>");
		out.println("<input type=hidden name=id value=" + id + ">");
		out.println("<input type=hidden name=action value=update>");
		out.println("<input type=text name=record value=" + record
			+ ">");
		out.println("<input type=submit value=Update>");
		out.println("</form>");
		out.println("</td>");
		out.println("<td>");
		out.println("<form method=post>");
		out.println("<input type=hidden name=id value=" + id + ">");
		out.println("<input type=hidden name=action value=delete>");
		out.println("<input type=submit value=Delete>");
		out.println("</form>");
		out.println("</td>");
		out.println("</tr>");

		Records.append("<option value=").append(id).append(">");
		Records.append(record).append("</option>\n");
	    }
	    out.println("</table>");
	    out.println("<b class=rbottom><b class=r4></b><b class=r3></b><b class=r2></b><b class=r1></b></b>");
	    out.println("</div>");

	    s.close();
	    con.close();
	} catch (SQLException e) {
	    // out.println(e.toString());
	} catch (Exception e) {
	    out.println(e.toString());
	}
	out.println("</body>");
	out.println("</html>");
    }

    protected void doPost(HttpServletRequest request,
	    HttpServletResponse response) throws ServletException, IOException {
	doGet(request, response);
    }

}
