package agilpizza.modelo.pizza;

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

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(new Ingrediente("Mussarela", 0.5));
		listaQueijos.add(new Ingrediente("Mussarela em dobro", 0.5));
		listaQueijos.add(new Ingrediente("Mussarela de Búfala", 1.0));
		listaQueijos.add(new Ingrediente("Parmesão", 0.5));
		listaQueijos.add(new Ingrediente("Catupiry", 1.0));
		listaQueijos.add(new Ingrediente("Requeijão", 0.5));
		listaQueijos.add(new Ingrediente("Provolone", 0.5));
		listaQueijos.add(new Ingrediente("Gorgonzola", 0.5));
		return listaQueijos;
	}

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

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

	private List<Ingrediente> listaOutros() {
		List<Ingrediente> listaOutros = new ArrayList<Ingrediente>();
		listaOutros.add(new Ingrediente("Ovo", 0.30));
		listaOutros.add(new Ingrediente("Orégano", 0.30));
		listaOutros.add(new Ingrediente("Molho de Tomate", 0.30));
		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();
	}

	public Ingrediente buscarIngrediente(String categoria, String ingrediente) {
		Categoria categoriaLista = categorias.get(categoria);
		List<Ingrediente> listaIngredientes = categoriaLista.getIngredientes();
		for (Ingrediente oIngrediente : listaIngredientes) {
			if (oIngrediente.getNome().equalsIgnoreCase(ingrediente)) {
				return oIngrediente;
			}
		}
		return null;
	}
}
