package database;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class QueryGenerator {
	
	private final static String url = "jdbc:postgresql://localhost:5432/ShadowHunterDatabase";
    private final static String user = "shManager";
    private final static String password = "shadowhunter1234";

	public static String AllFrom(String tableName) {
		return "SELECT * FROM " + getTable(tableName);
	}
	
	public static String WithId(String tableName, int d) {
		return "SELECT * FROM " + getTable(tableName) + "WHERE id =" + d;
	}
	
	public static String WithName(String tableName, String name) {
		return "SELECT * FROM " + getTable(tableName) + "WHERE nom ='" + name + "'";
	}
	
	public static String getTable(String tableName) {
		return "public." + '"' + tableName + '"';
	}
	
	public static String getIdWithNameFrom(String table, String name) {
		return "SELECT 'id' FROM " + getTable(table) + "WHERE nom ='" + name + "'";
	}
	
	public static String getNameWithIdFrom(String table, int d) {
		return "SELECT name FROM " + getTable(table) + "WHERE id =" + d;
	}
	
	public static String selectObjectWithId(int id, String tableName) {
		return "SELECT objet FROM" + getTable(tableName) + " WHERE id =" + id;
	}
	
	 public static Connection connect() throws SQLException {
	        return DriverManager.getConnection(url, user, password);
	   }
	
	public static void queryInsertObject(int id, Object o) throws IOException, SQLException {
		
		String table = null;
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutputStream oos;
		
		oos = new ObjectOutputStream(baos);
		oos.writeObject(o);
		oos.close();
			
		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

		byte[] object = bais.readAllBytes();
		InputStream objectIS = new ByteArrayInputStream(object);
				
		if(id <= 16) {
			table = getTable("CartesLumiere");
		} else if(id <= 32) {
			table = getTable("CartesTenebre");
		} else if(id <= 47) {
			table = getTable("CartesVision");
		} else if(id <= 57) {
			table = getTable("CartesPersonnage");
		} else if(id <= 61) {
			table = getTable("CartesDos");
		}
		
		String query = null;
		query = "UPDATE" + table + " SET objet = ";
		
		Connection conn = connect();
		PreparedStatement pst = conn.prepareStatement(query);
		pst.setBinaryStream(4, objectIS);
		pst.executeUpdate();
	}
	
}
