package br.com.codetec.saudesabor.service;

import android.content.Context;

import com.google.gson.Gson;

import org.jetbrains.annotations.NotNull;

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

import br.com.codetec.saudesabor.model.Produto;
import br.com.codetec.saudesabor.ui.login.LoginActivity;
import br.com.codetec.saudesabor.utils.SharedPreferenceUtil;

public class CarrinhoComprasGlobal {

    private Context context;
    public static HashMap<Produto, Integer> mapCarrinho = new HashMap<>();

    public CarrinhoComprasGlobal(Context context){
        this.context = context;
    }

    @NotNull
    private static String getChaveCarrinhoSessaoPreferencias() {
        return "carrinho" + LoginActivity.responseLogin.getUsuario().getId();
    }

    public ArrayList removerProduto(Produto produto){
        if(mapCarrinho.containsKey(produto)){
            int qtde = mapCarrinho.get(produto);
            qtde--;
            if(qtde == 0){
                mapCarrinho.remove(produto);
            }else{
                mapCarrinho.remove(produto);
                produto.setQuantity(qtde + "");
                mapCarrinho.put(produto, qtde);
            }
        }
        gravarNasPreferencias();
        return listaProdutos();
    }

    public ArrayList adicionarProduto(Produto produto) {
        Integer qtde = 0;
        if(mapCarrinho.containsKey(produto)){
            qtde = mapCarrinho.get(produto);
        }
        qtde++;
        produto.setQuantity(qtde.toString());
        mapCarrinho.put(produto, qtde);

        gravarNasPreferencias();

        return listaProdutos();
    }

    public void carregarNaSessao() {
        Map m = SharedPreferenceUtil.getObjectPreference(context, getChaveCarrinhoSessaoPreferencias(), Map.class);
        if(m != null){
            mapCarrinho = new HashMap<>();

            for(Object obj : m.keySet()){
                if(obj instanceof String){
                    String json = (String)obj;
                    Produto p = new Gson().fromJson(json, Produto.class);
                    Double quantity = (Double)m.get(obj);
                    mapCarrinho.put(p,quantity.intValue());
                }
            }
        }
    }

    public void limpar() {
        CarrinhoComprasGlobal.mapCarrinho = new HashMap<>();
        gravarNasPreferencias();
    }

    private void gravarNasPreferencias() {
        SharedPreferenceUtil.setObjectPreference(context, getChaveCarrinhoSessaoPreferencias(), CarrinhoComprasGlobal.mapCarrinho);
    }

    public static boolean isEmpty(){
        return CarrinhoComprasGlobal.mapCarrinho == null || CarrinhoComprasGlobal.mapCarrinho.isEmpty();
    }

    public static double getTotalProdutos() {
        ArrayList<Produto> listaProdutosAgrupados = new ArrayList();
        listaProdutosAgrupados.addAll(mapCarrinho.keySet());
        double total = 0d;
        for (Produto prod : listaProdutosAgrupados) {
            Double valor = new Double(prod.getValor());
            total += valor;
        }
        return total;
    }

    public static String getTotal(){
        try {
            Double total = getTotalProdutos();
            return total.intValue() + "";
        }catch(Exception e){
            return "";
        }
    }

    public static ArrayList listaProdutos() {
        ArrayList<Produto> listaProdutos = new ArrayList<>();
        listaProdutos.addAll(CarrinhoComprasGlobal.mapCarrinho.keySet());
        return listaProdutos;
    }

}
