package br.edu.ifba.inf008.mediaCenter.persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

import br.edu.ifba.inf008.mediaCenter.model.Servidor;
import br.edu.ifba.inf008.mediaCenter.model.ServidorBasico;
import teste.TesteBancoDados;

public class ServidorDAOSQL implements ServidorDAO {

	public static final String URI = "jdbc:postgresql://localhost:5432/postgres"; 
	public static final String USER = "postgres";	
	public static final String PWD = "aluno";	
	public static final String INSERT_SERVER = "INSERT INTO SERVIDOR_BASICO " + 
            									"(id, latenciaLeitura, latenciaEscrita, " +
            									"capacidadeOcupada, capacidadeTotal )  " +
            									"VALUES(?, ?, ?, ?, ?)";
	
	public static final String SELECT_ALL = "SELECT id, latenciaLeitura, " + 
			                                "latenciaEscrita, capacidadeOcupada, " +
		                                    "capacidadeTotal " +
		                                    "FROM  SERVIDOR_BASICO ";
	
	public ServidorDAOSQL() throws SQLException{
		DriverManager.registerDriver(new org.postgresql.Driver());
	}
	
	
	public Connection getConn() throws SQLException{
		return DriverManager.getConnection(ServidorDAOSQL.URI,
									       ServidorDAOSQL.USER, ServidorDAOSQL.PWD);
	}
	
	
	@Override
	public Collection<Servidor> findAll() throws Exception {
		Collection<Servidor> servidores = new HashSet<Servidor>();
		Connection conn = this.getConn();
		PreparedStatement pStmt = conn.prepareStatement(SELECT_ALL);
		ResultSet rSet = pStmt.executeQuery();
		while(rSet.next()) {
			ServidorBasico servidor = new ServidorBasico(rSet.getString("id"), 
											             rSet.getLong("capacidadeTotal"), 
											             rSet.getDouble("latenciaLeitura"), 
											             	rSet.getDouble("latenciaEscrita"));
			servidores.add(servidor);
		}
		rSet.close();
		return servidores;
	}

	@Override
	public void save(Servidor servidor) throws Exception {
		saveServidorBasico(servidor);
	}


	private void saveServidorBasico(Servidor servidor) throws SQLException {
		Connection conn = this.getConn();
		PreparedStatement pStmt = conn.prepareStatement(INSERT_SERVER);
		pStmt.setString(1, servidor.getId());
		pStmt.setDouble(2, servidor.getLatenciaLeitura());
		pStmt.setDouble(3, servidor.getLatenciaEscrita());
		pStmt.setLong(4, servidor.getCapacidade());
		pStmt.setLong(5, servidor.getCapacidade());
		pStmt.executeUpdate();
		pStmt.close();
		conn.close();
	}

}
