package agilpizza.dao;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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

public class CategoriaDAO {
	private static CategoriaDAO categoriaDAO=new CategoriaDAO();
	public static CategoriaDAO getCategoriaDAO(){
		return categoriaDAO;
	}
	private Map<String, Categoria> categorias;

	/**
	 * Construtor padrão para o DAO que armazena categorias na memória.
	 * 
	 */
	public CategoriaDAO() {
		
		categorias = new LinkedHashMap<String, Categoria>();
		categorias.put("Queijos",criaCategoria("Queijos",3.0, listaDeQueijos()));

		categorias.put("Vegetais", criaCategoria("Vegetais",4.0, listaDeVegetais()));
		categorias.put("Carnes", criaCategoria("Carnes",4.0, listaDeCarnes()));
		categorias.put("Outros", criaCategoria("Outros",2.0, listaOutros()));
	}
	
	private Categoria criaCategoria(String name,double preco,List<Ingrediente> list) {
		Categoria categoria;
		categoria=new Categoria(name,list);
		categoria.setPreco(preco);
		return categoria;
	}
	
	private List<Ingrediente> listaDeQueijos() {
		List<Ingrediente> listaQueijos = new ArrayList<Ingrediente>();
		listaQueijos.add(new Ingrediente("Muzzarela",3.0));
		listaQueijos.add(new Ingrediente("Muzzarela em dobro",3.0));
		listaQueijos.add(new Ingrediente("Muzzarela de Búfala",3.0));
		listaQueijos.add(new Ingrediente("Parmesão",3.0));
		listaQueijos.add(new Ingrediente("Catupiry",3.0));
		listaQueijos.add(new Ingrediente("Requeijão",3.0));
		listaQueijos.add(new Ingrediente("Provolone",3.0));
		listaQueijos.add(new Ingrediente("Gorgonzola",3.0));
		return listaQueijos;
	}

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

	private List<Ingrediente> listaDeCarnes() {
		List<Ingrediente> listaCarnes = new ArrayList<Ingrediente>();
		listaCarnes.add(new Ingrediente("Presunto",4.0));
		listaCarnes.add(new Ingrediente("Frango",4.0));
		listaCarnes.add(new Ingrediente("Bacon",4.0));
		listaCarnes.add(new Ingrediente("Calabresa",4.0));
		listaCarnes.add(new Ingrediente("Lingüiça toscana moída",4.0));
		listaCarnes.add(new Ingrediente("Aliche",4.0));
		return listaCarnes;
	}

	private List<Ingrediente> listaOutros() {
		List<Ingrediente> listaOutros = new ArrayList<Ingrediente>();
		listaOutros.add(new Ingrediente("Ovo",2.0));
		listaOutros.add(new Ingrediente("Orégano",2.0));
		listaOutros.add(new Ingrediente("Molho de Tomate",2.0));
		listaOutros.add(new Ingrediente("Azeitonas Pretas",2.0));
		listaOutros.add(new Ingrediente("Cebola",2.0));
		listaOutros.add(new Ingrediente("Sálvia",2.0));
		
		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 List<Categoria> buscaCategorias() {
		List<Categoria> lista = new ArrayList<Categoria>();
		lista.addAll(categorias.values());
		return lista; 
	}

}
