package br.com.codetec.saudesabor.service;

import android.content.Context;

import androidx.fragment.app.Fragment;

import org.jetbrains.annotations.NotNull;

import java.io.IOException;

import br.com.codetec.saudesabor.R;
import br.com.codetec.saudesabor.model.RespostaRegistraVenda;
import br.com.codetec.saudesabor.ui.login.LoginActivity;
import br.com.codetec.saudesabor.ui.login.ui.notifications.CarrinhoFragment;
import br.com.codetec.saudesabor.utils.SharedPreferenceUtil;
import br.com.codetec.saudesabor.utils.components.alert.CustomAlert;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class PedidoComprasService {

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

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

    public static void gravarCheckNasPreferencias(Context context, String dadosPedido) {
        SharedPreferenceUtil.setObjectPreference(context, getChavePedidoCheckSessaoPreferencias(), dadosPedido);
    }

    public static void gravarNasPreferencias(Context context, String dadosPedido) {
        SharedPreferenceUtil.setObjectPreference(context, getChavePedidoSessaoPreferencias(), dadosPedido);
    }

    public static void limparPedido(Context context){
        SharedPreferenceUtil.setObjectPreference(context, getChavePedidoSessaoPreferencias(), null);
    }

    public static String getDadosPedido(Context context){
        return SharedPreferenceUtil.getObjectPreference(context, getChavePedidoSessaoPreferencias(), String.class);
    }

    public static String getDadosPedidoCheck(Context context){
        return SharedPreferenceUtil.getObjectPreference(context, getChavePedidoCheckSessaoPreferencias(), String.class);
    }

    public static void enviarPedido(Fragment fragment) {
        String dados = getDadosPedido(fragment.getContext());
        if(dados == null){
            return;
        }
        Call<RespostaRegistraVenda> call =
                ServiceConector
                        .getService(fragment.getActivity(), fragment.getActivity().getString(R.string.realizando_pedido))
                        .registraVenda(dados);
        call.enqueue(new Callback<RespostaRegistraVenda>() {
            @Override
            public void onResponse(Call<RespostaRegistraVenda> call, Response<RespostaRegistraVenda> response) {
                if(response.body()!=null){
                    if(response.body().getErro()==false) {
                        new CarrinhoComprasGlobal(fragment.getActivity()).limpar();
                        limparPedido(fragment.getContext());
                        fragment.onResume();
                    }else{
                        CustomAlert.getInstance().show(fragment.getActivity(), response.body().getMensagem());
                    }
                }
            }
            @Override
            public void onFailure(Call<RespostaRegistraVenda> call, Throwable t) {
                if(call.toString()!=null){
                }
            }
        });
    }

    public static void checkPedido(Fragment fragment) {
        String dados = getDadosPedidoCheck(fragment.getContext());
        if(dados == null){
            return;
        }
        Call<RespostaRegistraVenda> call =
                ServiceConector
                        .getService(fragment.getActivity(), fragment.getActivity().getString(R.string.check_pedido))
                        .checkVenda(dados);
        call.enqueue(new Callback<RespostaRegistraVenda>() {
            @Override
            public void onResponse(Call<RespostaRegistraVenda> call, Response<RespostaRegistraVenda> response) {
                if(response.body()!=null){
                    if(response.body().getErro()==false) {
                        gravarNasPreferencias(fragment.getContext(), dados);
                        enviarPedido(fragment);
                    }else{
                        CustomAlert.getInstance().show(fragment.getActivity(), response.body().getMensagem());
                    }
                }
            }
            @Override
            public void onFailure(Call<RespostaRegistraVenda> call, Throwable t) {
                if(call.toString()!=null){
                }
            }
        });
    }
}