package com.coder.hms.connection;

import java.awt.Dialog.ModalExclusionType;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import com.coder.hms.ui.external.InformationFrame;
import com.ibatis.common.jdbc.ScriptRunner;

public class DatabaseServerPreparingInitializer extends JFrame {

	/**
	 * 
	 */
	private static File file;
	private boolean status = false;
	private static final long serialVersionUID = 1L;


	public DatabaseServerPreparingInitializer() {
		
		setType(Type.POPUP);
		setResizable(false);
		this.setAlwaysOnTop(isAlwaysOnTopSupported());
		setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
				
		this.pack();
		
	}
	

	public void runScriptFile() {
		
		final InformationFrame dialog = new InformationFrame();
		final String sqlFilePath = "src/com/coder/hms/connection/hotel_management_system.sql";
		final String DB_DRIVER = "com.mysql.cj.jdbc.Driver";
		final String DB_CONNECTION = "jdbc:mysql://localhost:3306/";
		String DB_USER = JOptionPane.showInputDialog(this, "Enter your database user name :", "Coder HMS [Input]", JOptionPane.QUESTION_MESSAGE);
		String DB_PASSWORD = JOptionPane.showInputDialog(this, "Enter your database password :", "Coder HMS [Input]", JOptionPane.QUESTION_MESSAGE);
		
			try {
				
				Class.forName(DB_DRIVER);
				Connection connection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
				
				ScriptRunner runner = new ScriptRunner(connection, false, false);
				Reader br = new BufferedReader(new FileReader(sqlFilePath));

				file = new File(System.getProperty("user.dir")+ File.separator + "Logging Store/SQL_Logs.txt");
				PrintWriter writer = new PrintWriter(file);
				runner.setLogWriter(writer);
				runner.runScript(br);
				dialog.setMessage("Your database and tables created successfully.");
				
				status = true;
				
			} catch (SQLException | ClassNotFoundException | IOException ex) {
				dialog.setMessage(ex.getMessage());
				status = false;
			}
		
		dialog.setVisible(true);
	}
	
	public static File getLogFile() {
		if(file.exists()) {
			return DatabaseServerPreparingInitializer.file;
		}
		return null;
	}

	public boolean getStatus() {
		return this.status;
	}

}