package br.com.senacagil.springmvc.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.com.senacagil.springmvc.business.Disciplina;
import br.com.senacagil.springmvc.util.DBConexao;

public class DisciplinaDAO {
	private DBConexao db = null;

	public DisciplinaDAO(DBConexao dbConexao) {
		super();
		this.db = dbConexao;
	}

	// private List<Disciplina> disciplinas = new List<Disciplina>();

	public void cria(String codigo, String nome, int cargaHoraria) {
		// Disciplina disciplina = new Disciplina(codigo, nome, cargaHoraria);
		// disciplinas.add(disciplina);
		try {
			Connection c = db.getConnection();
			Statement s = c.createStatement();
			s
					.execute("INSERT INTO disciplina(codigo, nome, carga_horaria) VALUES('"
							+ codigo
							+ "', '"
							+ nome
							+ "', "
							+ cargaHoraria
							+ ")");
			s.close();
		} catch (SQLException sqle) {
			System.out.println(sqle.getMessage());
		}
	}

	public void extingue(String codigo) {
		// for(int i = 0; i < disciplinas.size(); i ++) {
		// Disciplina disciplina = (Disciplina)disciplinas.get(i);
		// if(codigo.equals(disciplina.getCodigo())) {
		// disciplinas.remove(disciplinas.get(i));
		// break;
		// }
		// }
		try {
			Connection c = db.getConnection();
			Statement s = c.createStatement();
			s.execute("DELETE FROM disciplina WHERE codigo='" + codigo + "'");
			s.close();
		} catch (SQLException sqle) {
			System.out.println(sqle.getMessage());
		}
	}

	public void alteraDados(String codigo, String nome, int cargaHoraria) {
		// for(int i = 0; i < disciplinas.size(); i ++) {
		// Disciplina disciplina = (Disciplina)disciplinas.get(i);
		// if(codigo.equals(disciplina.getCodigo())) {
		// disciplina.setNome(nome);
		// disciplina.setCargaHoraria(cargaHoraria);
		// break;
		// }
		// }
		try {
			Connection c = db.getConnection();
			Statement s = c.createStatement();
			s.execute("UPDATE disciplina SET nome='" + nome
					+ "', carga_horaria=" + cargaHoraria + " WHERE codigo='"
					+ codigo + "'");
			s.close();
		} catch (SQLException sqle) {
			System.out.println(sqle.getMessage());
		}
	}

	public List<Disciplina> listaDados() {
		// return disciplinas;
		List<Disciplina> disciplinas = new ArrayList<Disciplina>();
		try {
			Connection c = db.getConnection();
			Statement s = c.createStatement();
			ResultSet rs = s
					.executeQuery("SELECT * FROM disciplina ORDER BY nome");
			while (rs.next()) {
				Disciplina disciplina = new Disciplina(rs.getString("codigo"),
						rs.getString("nome"), rs.getInt("carga_horaria"));
				disciplinas.add(disciplina);
			}
			s.close();
		} catch (SQLException sqle) {
			System.out.println(sqle.getMessage());
		}
		return disciplinas;
	}

	public List<Disciplina> listarDisciplinas() {
		// Monta base do SQL
		String sql = "SELECT * FROM Disciplina order by nome";

		try {
			// Recupera conexão com o banco
			Connection con = db.getConnection();

			// Cria um statement
			Statement stmt = con.createStatement();

			// Executa o sql
			ResultSet rs = stmt.executeQuery(sql);

			// Cria objeto de Lista
			List<Disciplina> disciplinas = new ArrayList<Disciplina>();

			// Direciona o ResultSet para o primeiro registro
			while (rs.next()) {
				Disciplina p = montaDisciplina(rs);
				disciplinas.add(p);
			}

			// Termina o resultset e o statement
			rs.close();
			stmt.close();

			// Retorna a lista
			return disciplinas;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}

	private Disciplina montaDisciplina(ResultSet rs) throws SQLException {
		String id = rs.getString("id");
		String nome = rs.getString("nome");

		Disciplina a = new Disciplina(id, nome);

		return a;
	}

}