package agilpizza.dao;

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

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

public class ProdutoDAO {

	private Map<String, Categoria> categorias;
	private List<Ingrediente> todosIngredientes;
	
	private HashMap<String, Ingrediente> IngredienteNome;

	private List<Ingrediente> listaMassas = new ArrayList<Ingrediente>();	
	private List<Ingrediente> listaQueijos = new ArrayList<Ingrediente>();
	private List<Ingrediente> listaVegetais = new ArrayList<Ingrediente>();
	private List<Ingrediente> listaCarnes = new ArrayList<Ingrediente>();
	private List<Ingrediente> listaOutros = new ArrayList<Ingrediente>();
	private List<Ingrediente> listaBebidas = new ArrayList<Ingrediente>();
	
	
	
	/**
	 * Construtor padrão para o DAO que armazena categorias na memória.
	 * 
	 */
	public ProdutoDAO() {
	
		
		categorias = new LinkedHashMap<String, Categoria>();
		categorias.put("Massas", new Categoria("Massas", listaMassas));
		categorias.put("Queijos", new Categoria("Queijos", listaQueijos));
		categorias.put("Vegetais", new Categoria("Vegetais", listaVegetais));
		categorias.put("Carnes", new Categoria("Carnes", listaCarnes));
		categorias.put("Outros", new Categoria("Outros", listaOutros));
		categorias.put("Bebidas", new Categoria("Bebidas", listaBebidas));
				

		IngredienteNome = new HashMap<String, Ingrediente>();
	
		inicializaListaMassas();
		inicializaListaDeQueijos();
		inicializaListaDeVegetais();
		inicializaListaDeCarnes();
		inicializaListaOutros();
		inicializaListaBebidas();
		
		colocaIngredientesNoMapa(listaMassas);
		colocaIngredientesNoMapa(listaQueijos);
		colocaIngredientesNoMapa(listaVegetais);
		colocaIngredientesNoMapa(listaCarnes);
		colocaIngredientesNoMapa(listaOutros);
		colocaIngredientesNoMapa(listaBebidas);
				
		
		todosIngredientes = new ArrayList<Ingrediente>();
		todosIngredientes.addAll(listaMassas);
		todosIngredientes.addAll(listaQueijos);
		todosIngredientes.addAll(listaVegetais);
		todosIngredientes.addAll(listaCarnes);
		todosIngredientes.addAll(listaOutros);
		todosIngredientes.addAll(listaBebidas);
				
	}

	private void colocaIngredientesNoMapa(List<Ingrediente> lista) {
		if (lista!=null)
			for(Ingrediente x: lista){
				IngredienteNome.put(x.getNome(), x);
			}
	}

	private void inicializaListaDeQueijos() {
		listaQueijos.add(new Ingrediente("Muzzarela", 3));		
		listaQueijos.add(new Ingrediente("Muzzarela em dobro", 4.50));		
		listaQueijos.add(new Ingrediente("Muzzarela de Búfala",4.50));
		listaQueijos.add(new Ingrediente("Parmesão",5));
		listaQueijos.add(new Ingrediente("Catupiry",5));
		listaQueijos.add(new Ingrediente("Requeijão",4));
		listaQueijos.add(new Ingrediente("Provolone",5));
		listaQueijos.add(new Ingrediente("Gorgonzola",5));
	}
	
	private void inicializaListaDeVegetais() {
		listaVegetais.add(new Ingrediente("Escarola",5));
		listaVegetais.add(new Ingrediente("Brócolis",3));
		listaVegetais.add(new Ingrediente("Rúcula",5));
		listaVegetais.add(new Ingrediente("Tomate",5));
		listaVegetais.add(new Ingrediente("Tomate cereja",8));
		listaVegetais.add(new Ingrediente("Tomates secos",8));
		listaVegetais.add(new Ingrediente("Champignon",8));
		listaVegetais.add(new Ingrediente("Shitake",8));
		listaVegetais.add(new Ingrediente("Shimeji",8));
		listaVegetais.add(new Ingrediente("Aspargos",8));
		listaVegetais.add(new Ingrediente("Alcaparras",4));
		listaVegetais.add(new Ingrediente("Cebola",3));
		listaVegetais.add(new Ingrediente("Alho",3));
		listaVegetais.add(new Ingrediente("Milho",3));
		listaVegetais.add(new Ingrediente("Alcachofra",8));
		listaVegetais.add(new Ingrediente("Abobrinha",3));
		listaVegetais.add(new Ingrediente("Berinjela",3));
	}

	private void inicializaListaDeCarnes() {
		listaCarnes.add(new Ingrediente("Presunto",5));
		listaCarnes.add(new Ingrediente("Frango",5));
		listaCarnes.add(new Ingrediente("Bacon",5));
		listaCarnes.add(new Ingrediente("Calabresa",5));
	}

	private void inicializaListaOutros() {
		listaOutros.add(new Ingrediente("Ovo",1));
		listaOutros.add(new Ingrediente("Orégano",1));
		listaOutros.add(new Ingrediente("Molho de Tomate",2));
	}

	private void inicializaListaBebidas() {
		listaBebidas.add(new Ingrediente("Coca-cola lata",2.50));
		listaBebidas.add(new Ingrediente("Coca-cola garrafa 2l",2.50));		
		listaBebidas.add(new Ingrediente("Guaraná lata",2.00));
		listaBebidas.add(new Ingrediente("Guaraná garrafa 2l",2.00));		
		listaBebidas.add(new Ingrediente("Fanta lata",2.00));
		listaBebidas.add(new Ingrediente("Fanta garrafa 2l",2.00));
		
		listaBebidas.add(new Ingrediente("Cerveja Antartica lata",3.00));
		listaBebidas.add(new Ingrediente("Cerveja Antartica garrafa 600ml",3.00));		
		
		listaBebidas.add(new Ingrediente("Cerveja Skol lata",3.00));
		listaBebidas.add(new Ingrediente("Cerveja Importada lata",3.50));		

		listaBebidas.add(new Ingrediente("Cerveja Skol garrafa 600ml",3.00));
		listaBebidas.add(new Ingrediente("Cerveja Importada garrafa 600ml",3.50));		
		
		listaBebidas.add(new Ingrediente("Água com gás copo",1.50));
		listaBebidas.add(new Ingrediente("Água sem gás garrafa",1.50));

		listaBebidas.add(new Ingrediente("Água com gás copo",1.50));
		listaBebidas.add(new Ingrediente("Água sem gás garrafa",1.50));

		listaBebidas.add(new Ingrediente("Suco del valle Todos 1l",2.50));		
		listaBebidas.add(new Ingrediente("Suco del valle Light 1l",2.50));
		listaBebidas.add(new Ingrediente("Suco del valle Soja 1l",2.50));		
	}

	
	private void inicializaListaMassas() {
		listaMassas.add(new Ingrediente("Massa fina",10));
		listaMassas.add(new Ingrediente("Massa média",15));
		listaMassas.add(new Ingrediente("Massa grossa",20));
	}
	
	
	/**
	 * 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 Collection<Ingrediente> buscaIngredientes(){
		return todosIngredientes;
	}
	
	public Ingrediente buscaIngrediente(String nome){
		return IngredienteNome.get(nome);
	}
	
}
