package dao;

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

import util.DBUtil;

import business.Mensalidade;

public class MensalidadeDAO 
{

	public String adicionarMensalidade(Mensalidade mensalidade)
	{
		boolean babou = false;
		String msg = "Mensalidade Registrada 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 mensalidade where id = ";
			sql += mensalidade.getId();

			System.out.println(sql);
			// Executa o sql
			ResultSet rs = stmt.executeQuery(sql);
		
			if (rs.next()){
				babou = true;
				msg = "Mensalidade já registrada";
			}
			// Termina o statement
			stmt.close();
	
			if (!babou)
			{
				// Monta base do SQL
				sql = "INSERT INTO mensalidade(data_parcela, data_pagto, valor, id_aluno) values";
	
				// Adiciona valores da mensalidade
				
				sql += "(";
				sql += "'"+mensalidade.getData_parcela()+"'";
				sql += ",";
				sql += "'"+mensalidade.getData_pagto()+"'";
				sql += ",";
				sql += "'"+mensalidade.getValor()+"'";
				sql += ",";
				sql += "'"+mensalidade.getId_aluno()+"'";
			
				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 String removerMensalidade(int idMensalidade)
	{
		// Monta base do SQL
		String sql = "DELETE FROM mensalidade WHERE id";
		String msg = null;
		// Adiciona posicao
		sql += "=";
		sql += idMensalidade;
	
		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;
	}

	public Mensalidade leMensalidade(int idMensalidade)
	{
		// Monta base do SQL
		String sql = "SELECT * FROM mensalidade WHERE id";
	
		// Adiciona posicao
		sql += "=";
		sql += idMensalidade;	
	
		// Recupera conexão com o banco
		DBUtil db = DBUtil.getInstance();
		Connection con = db.getConnection();
	
		try
		{
			// Cria um statement
			Statement stmt = con.createStatement();
		
			// Executa o sql
			ResultSet rs = stmt.executeQuery(sql);
		
			// Direciona o ResultSet para o primeiro registro
			rs.next(); 
		
			// Monta o mensalidade
			Mensalidade a = montaMensalidade(rs);
		
			// Termina o resultset e o statement
			rs.close();
			stmt.close();
		
			// Retorna o mensalidade
			return a;	
		}
		catch(SQLException e)
		{
			e.printStackTrace();
			return null;
		}	
	}

	public ArrayList<Mensalidade> listarMensalidades(int id_aluno)
	{
		// Monta base do SQL
		String sql = "SELECT * FROM mensalidade where id_aluno = "+id_aluno;
	
		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
			ArrayList<Mensalidade> mensalidades = new ArrayList<Mensalidade>();
		
			// Direciona o ResultSet para o primeiro registro
			while(rs.next())
			{
				Mensalidade p = montaMensalidade(rs);
				mensalidades.add(p);
			}
		
			// Termina o resultset e o statement
			rs.close();
			stmt.close();
		
			// Retorna a lista
			return mensalidades;		
	}
	catch(SQLException e)
	{
		e.printStackTrace();
		return null;
	}	
}

public ArrayList<Mensalidade> listarMensalidadesPorData(String nome)
{
	// Monta base do SQL
	String sql = "SELECT * FROM mensalidade where data_parcela like '%"+nome+"%'";
	
	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
		ArrayList<Mensalidade> mensalidades = new ArrayList<Mensalidade>();
		
		// Direciona o ResultSet para o primeiro registro
		while(rs.next())
		{
			Mensalidade p = montaMensalidade(rs);
			mensalidades.add(p);
		}
		
		// Termina o resultset e o statement
		rs.close();
		stmt.close();
		
		// Retorna a lista
		return mensalidades;		
	}
	catch(SQLException e)
	{
		e.printStackTrace();
		return null;
	}	
}

private Mensalidade montaMensalidade(ResultSet rs) throws SQLException
{
	int id				= rs.getInt("id");
	String data_parcela	= rs.getString("data_parcela");
	String data_pagto	= rs.getString("data_pagto");
	float valor			= rs.getFloat("valor");
	int id_aluno		= rs.getInt("id_aluno");
		
	Mensalidade m = new Mensalidade();
	
	m.setId(id);
	m.setData_parcela(data_parcela);
	m.setData_pagto(data_pagto);
	m.setValor(valor);
	m.setId_aluno(id_aluno);
		
	
	return m;
}	
public String atualizaMensalidade(Mensalidade mensalidade)
{
	// Monta base do SQL
	String sql = "UPDATE mensalidade set data_parcela=";
	String msg = "Mensalidade Alterada com Sucesso";
	
	// Adiciona valores do mensalidade
	
	sql += "'"+mensalidade.getData_parcela()+"'";
	sql += ",data_pagto='"+mensalidade.getData_pagto()+"'";
	sql += ",valor="+mensalidade.getValor();
	sql += ",id_aluno="+mensalidade.getId_aluno();
	
	sql += " where id="+mensalidade.getId();
	
	System.out.println(sql);
	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;
}
public int obtemUltimaMatricula()
{
	// Monta base do SQL
	String sql = "SELECT max(id) FROM mensalidade";
	
	// Recupera conexão com o banco
	DBUtil db = DBUtil.getInstance();
	Connection con = db.getConnection();
	
	try
	{
		// Cria um statement
		Statement stmt = con.createStatement();
		
		// Executa o sql
		ResultSet rs = stmt.executeQuery(sql);
		
		// Direciona o ResultSet para o primeiro registro
		rs.next(); 
		
		// Última matrícula
		int mat = rs.getInt("max");
		
		// Termina o resultset e o statement
		rs.close();
		stmt.close();
		
		// Retorna o mensalidade
		return mat;	
	}
	catch(SQLException e)
	{
		e.printStackTrace();
		return -1;
	}	
}

public int obtemIdMensComUsername(String username)
{
	// Monta base do SQL
	String sql = "SELECT id FROM mensalidade, usuario WHERE mensalidade.id = usuario.idalun and usuario.userid = '" + username + "'";
	
	// Recupera conexão com o banco
	DBUtil db = DBUtil.getInstance();
	Connection con = db.getConnection();
	
	try
	{
		// Cria um statement
		Statement stmt = con.createStatement();
		
		// Executa o sql
		ResultSet rs = stmt.executeQuery(sql);
		
		// Direciona o ResultSet para o primeiro registro
		rs.next(); 
		
		// Última matrícula
		int id = rs.getInt("id");
		
		// Termina o resultset e o statement
		rs.close();
		stmt.close();
		
		// Retorna a mensalidade
		return id;	
	}
	catch(SQLException e)
	{
		e.printStackTrace();
		return -1;
	}	
}


ArrayList<Mensalidade> lista = new ArrayList<Mensalidade>();

public void inserir(Mensalidade mens)
{
	lista.add(mens);
}

public boolean removerPorId(String matricula)
{
	for (int i=0; i<lista.size() ; i++)
	{
		Mensalidade mens = (Mensalidade)lista.get(i);
		
		if (matricula.equals( mens.getId() ))
		{
			lista.remove(mens);
			return true;
		}			
	}
	
	return false;		
}

public ArrayList<Mensalidade> listar()
{
	return lista;
}
}
