package agilpizza.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import agilpizza.modelo.Categoria;
import agilpizza.modelo.Ingrediente;

public class CategoriaDAO {

	private Map<String, Categoria> categorias;

	/**
	 * Construtor padrão para o DAO que armazena categorias na memória.
	 * 
	 */
	public CategoriaDAO() {
		categorias = new HashMap<String, Categoria>();
		categorias.put("Queijos", new Categoria("Queijos", listaDeQueijos()));
		categorias
				.put("Vegetais", new Categoria("Vegetais", listaDeVegetais()));
		categorias.put("Carnes", new Categoria("Carnes", listaDeCarnes()));
		categorias.put("Outros", new Categoria("Outros", listaOutros()));
	}

	private List<Ingrediente> listaDeQueijos() {
		List<Ingrediente> listaQueijos = new ArrayList<Ingrediente>();
		listaQueijos.add(IngredienteDAO.getInstance().busca("Muzzarela"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Muzzarela em dobro"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Muzzarela de Búfala"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Parmesão"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Catupiry"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Requeijão"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Provolone"));
		listaQueijos.add(IngredienteDAO.getInstance().busca("Gorgonzola"));
		return listaQueijos;
	}

	private List<Ingrediente> listaDeVegetais() {
		List<Ingrediente> listaVegetais = new ArrayList<Ingrediente>();
		listaVegetais.add(IngredienteDAO.getInstance().busca("Escarola"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Ervilha"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Brócolis"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Rúcula"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Tomate"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Tomate cereja"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Tomates secos"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Champignon"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Shitake"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Shimeji"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Aspargos"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Alcaparras"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Cebola"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Alho"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Milho"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Alcachofra"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Abobrinha"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Berinjela"));
		listaVegetais.add(IngredienteDAO.getInstance().busca("Palmito"));
		return listaVegetais;
	}

	private List<Ingrediente> listaDeCarnes() {
		List<Ingrediente> listaCarnes = new ArrayList<Ingrediente>();
		listaCarnes.add(IngredienteDAO.getInstance().busca("Presunto"));
		listaCarnes.add(IngredienteDAO.getInstance().busca("Frango"));
		listaCarnes.add(IngredienteDAO.getInstance().busca("Bacon"));
		listaCarnes.add(IngredienteDAO.getInstance().busca("Calabresa"));
		return listaCarnes;
	}

	private List<Ingrediente> listaOutros() {
		List<Ingrediente> listaOutros = new ArrayList<Ingrediente>();
		listaOutros.add(IngredienteDAO.getInstance().busca("Ovo"));
		listaOutros.add(IngredienteDAO.getInstance().busca("Aliche"));
		listaOutros.add(IngredienteDAO.getInstance().busca("Orégano"));
		listaOutros.add(IngredienteDAO.getInstance().busca("Molho de tomate"));
		return listaOutros;
	}

	/**
	 * Busca categoria pelo nome.
	 * 
	 * @param nomeDaCategoria
	 * @return Categoria encontrada.
	 */
	public Categoria buscaCategoria(String nomeDaCategoria) {
		return categorias.get(nomeDaCategoria);
	}

	/**
	 * Busca todas as categorias cadastradas.
	 * 
	 * @return Coleção de categorias cadastradas.
	 */
	public Collection<Categoria> buscaCategorias() {
		return categorias.values();
	}

}
