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;
	private Map<String, Pizza> pizzas;

	
	/**
	 * 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()));

		pizzas = new HashMap<String, Pizza>();
		pizzas.put("Portuguesa", new Pizza("Portuguesa", listaPortuguesa() ));
		pizzas.put("Quatro Queijos", new Pizza("Quatro Queijos", listaQuatroQueijos() ));
		pizzas.put("Romana", new Pizza("Romana", listaRomana() ));
		pizzas.put("Calabresa", new Pizza("Calabresa", listaCalabresa() ));
		pizzas.put("Vegetariana", new Pizza("Vegetariana", listaVegetariana() ));
		pizzas.put("Frango com Catupiry", new Pizza("Frango com Catupiry", listaFrangoCatupiry() ));
		
	}

	private List<Ingrediente> listaDeQueijos() {
		List<Ingrediente> listaQueijos = new ArrayList<Ingrediente>();
		listaQueijos.add(new Ingrediente("Mussarela",0.50));
		listaQueijos.add(new Ingrediente("Mussarela em dobro",1.00));
		listaQueijos.add(new Ingrediente("Mussarela de Búfala",1.00));
		listaQueijos.add(new Ingrediente("Parmesão",0.50));
		listaQueijos.add(new Ingrediente("Catupiry",1.00));
		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",1.20));
		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.20));
		listaCarnes.add(new Ingrediente("Frango",1.20));
		listaCarnes.add(new Ingrediente("Bacon",1.20));
		listaCarnes.add(new Ingrediente("Calabresa",1.20));
		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;
	}
	
	
	// Pizza
	private List<Ingrediente> listaPortuguesa(){
		List<Ingrediente> portuguesa = new ArrayList<Ingrediente>();
		portuguesa.add(new Ingrediente("Massa"));
		portuguesa.add(new Ingrediente("Ovo"));
		portuguesa.add(new Ingrediente("Presunto"));
		portuguesa.add(new Ingrediente("Queijo"));
		portuguesa.add(new Ingrediente("Tomate"));
		portuguesa.add(new Ingrediente("Cebola"));
		portuguesa.add(new Ingrediente("Azeitona"));
		portuguesa.add(new Ingrediente("Orégano"));
		portuguesa.add(new Ingrediente("Tempero Verde"));
		portuguesa.add(new Ingrediente("Molho de Tomate"));
				
		return portuguesa;
	}

	private List<Ingrediente> listaQuatroQueijos(){
		List<Ingrediente> quatroQueijos = new ArrayList<Ingrediente>();
		quatroQueijos.add(new Ingrediente("Massa"));
		quatroQueijos.add(new Ingrediente("Mussarela"));
		quatroQueijos.add(new Ingrediente("Parmesão"));
		quatroQueijos.add(new Ingrediente("Gorgonzola"));
		quatroQueijos.add(new Ingrediente("Catupiry"));
		
		return quatroQueijos;
	}

	private List<Ingrediente> listaRomana(){
		List<Ingrediente> romana = new ArrayList<Ingrediente>();
		romana.add(new Ingrediente("Massa"));
		romana.add(new Ingrediente("molho de tomate"));
		romana.add(new Ingrediente("Mussarela"));
		romana.add(new Ingrediente("Alici"));
		romana.add(new Ingrediente("Catupiry"));
		
		return romana;
	}

	private List<Ingrediente> listaCalabresa(){
		List<Ingrediente> calabresa = new ArrayList<Ingrediente>();
		calabresa.add(new Ingrediente("Massa"));
		calabresa.add(new Ingrediente("Cebola"));
		calabresa.add(new Ingrediente("Cebola"));
		calabresa.add(new Ingrediente("Calabresa"));
		calabresa.add(new Ingrediente("Azeitona"));
		
		return calabresa;
	}
	
	private List<Ingrediente> listaVegetariana(){
		List<Ingrediente> vegetariana = new ArrayList<Ingrediente>();
		vegetariana.add(new Ingrediente("Massa"));
		vegetariana.add(new Ingrediente("Tomates"));
		vegetariana.add(new Ingrediente("Berinjela"));
		vegetariana.add(new Ingrediente("Pimentão"));
		vegetariana.add(new Ingrediente("Orégano"));
		
		return vegetariana;
	}
	
	private List<Ingrediente> listaFrangoCatupiry(){
		List<Ingrediente> frangoCatupiry = new ArrayList<Ingrediente>();
		frangoCatupiry.add(new Ingrediente("Massa"));
		frangoCatupiry.add(new Ingrediente("Molho de tomate"));
		frangoCatupiry.add(new Ingrediente("Peito de frango"));
		frangoCatupiry.add(new Ingrediente("Catupiry"));
		
		return frangoCatupiry;
	}

	/**
	 * 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();
	}

	
	
	
////////////////////////////////////	

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

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

}
