package 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 util.DBConexao;
import business.Ementa;

public class EmentaDAO {
	private DBConexao db = null;

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

	List<Ementa> lista = new ArrayList<Ementa>();

	public void inserir(Ementa em) {
		lista.add(em);
	}

	public boolean removerPorAssunto(String assunto) {
		for (int i = 0; i < lista.size(); i++) {
			Ementa em = (Ementa) lista.get(i);

			if (assunto.equals(em.getConteudo())) {
				lista.remove(em);
				return true;
			}
		}

		return false;
	}

	public List<Ementa> listar() {
		return lista;
	}

	public String adicionarEmenta(Ementa ementa) {
		boolean babou = false;
		String msg = "Ementa Cadastrado com Sucesso";

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

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

			// Monta base do SQL
			String sql = "SELECT * from ementa where conteudo =  ";
			sql += "'" + ementa.getConteudo() + "'";

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

			if (rs.next()) {
				babou = true;
				msg = "Conteudo já cadastrado";
			}
			// Termina o statement
			stmt.close();

			if (!babou) {
				// Monta base do SQL
				sql = "INSERT INTO ementa(id, conteudo,num_aulas, id_disciplina, data_ementa) values";

				// Adiciona valores do professor
				sql += "(";
				sql += "nextval(" + "'" + "ementa_id_seq" + "'" + ")";
				sql += ",";

				sql += "'" + ementa.getConteudo() + "'";
				sql += ",";
				sql += "'" + Integer.parseInt(ementa.getNum_aulas()) + "'";
				sql += ",";

				sql += "'" + Integer.parseInt(ementa.getId_disciplina()) + "'";
				sql += ",";

				sql += "'" + ementa.getData_ementa() + "'";

				sql += ")";

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

				// Executa o sql
				stmt.executeUpdate(sql);

				// Termina o statement
				stmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
			msg = "Erro na execução do SQL. Contacte o Administrador";
		}
		return msg;

	}

	public List<Ementa> listarEmentas() {
		// Monta base do SQL
		String sql = "SELECT * FROM ementa order by conteudo";

		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<Ementa> ementas = new ArrayList<Ementa>();

			// Direciona o ResultSet para o primeiro registro
			while (rs.next()) {
				Ementa p = montaEmenta(rs);
				ementas.add(p);
			}

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

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

	private Ementa montaEmenta(ResultSet rs) throws SQLException {
		// int id = rs.getInt("id");
		String conteudo = rs.getString("conteudo");
		String num_aulas = rs.getString("num_aulas");
		String data_ementa = rs.getString("data_ementa");
		// Disciplina id_disciplina = new Disciplina();
		// id_disciplina.setId(rs.getInt("idDisciplina"));

		Ementa e = new Ementa();

		// a.setId(id);
		e.setConteudo(conteudo);
		e.setNum_aulas(num_aulas);
		e.setData_ementa(data_ementa);
		// e.setId_disciplina(id_disciplina);

		return e;
	}

	public String removerEmenta(String conteudo) {
		// Monta base do SQL
		String sql = "DELETE FROM ementa WHERE conteudo";
		String msg = null;

		// Adiciona posicao
		sql += "=";
		sql += "'" + conteudo + "'";

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

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

			// Executa o sql
			stmt.executeUpdate(sql);

			// Termina o statement
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
			msg = "Erro na execução do SQL. Contacte o Administrador";
		}
		return msg;
	}
}
