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.DBUtil;

import business.Ementa;


public class EmentaDAO {


		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
				DBUtil db = DBUtil.getInstance();
				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
				DBUtil db = DBUtil.getInstance();
				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
				DBUtil db = DBUtil.getInstance();
				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;
		}
}

