package com.cscodetech.moverslorry.fragment;


import static androidx.recyclerview.widget.LinearLayoutManager.VERTICAL;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.cscodetech.moverslorry.R;
import com.cscodetech.moverslorry.adepter.BannerAdapter;
import com.cscodetech.moverslorry.adepter.HomeLorryAdapter;
import com.cscodetech.moverslorry.adepter.OperatAdapter;
import com.cscodetech.moverslorry.databinding.FragmentHomeBinding;
import com.cscodetech.moverslorry.model.Home;
import com.cscodetech.moverslorry.model.HomeData;
import com.cscodetech.moverslorry.model.UserLogin;
import com.cscodetech.moverslorry.retrofit.APIClient;
import com.cscodetech.moverslorry.retrofit.GetResult;
import com.cscodetech.moverslorry.ui.AddLorryActivity;
import com.cscodetech.moverslorry.ui.FindLoadActivity;
import com.cscodetech.moverslorry.ui.HomeActivity;
import com.cscodetech.moverslorry.ui.IdentityVerifyActivity;
import com.cscodetech.moverslorry.ui.NearLoadActivity;
import com.cscodetech.moverslorry.ui.NotificationActivity;
import com.cscodetech.moverslorry.utils.CustPrograssbar;
import com.cscodetech.moverslorry.utils.SessionManager;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.tbuonomo.viewpagerdotsindicator.DotsIndicator;

import org.json.JSONException;
import org.json.JSONObject;

import okhttp3.MediaType;
import okhttp3.RequestBody;
import retrofit2.Call;


public class HomeFragment extends Fragment implements GetResult.MyListener, HomeLorryAdapter.RecyclerTouchListener {

    private FragmentHomeBinding binding;
    SessionManager sessionManager;
    UserLogin userLogin;
    CustPrograssbar custPrograssbar;
    DotsIndicator extensiblePageIndicator;
    HomeData homeData;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        binding = FragmentHomeBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        custPrograssbar = new CustPrograssbar();
        sessionManager = new SessionManager(getActivity());
        sessionManager.getUserDetails();
        userLogin = sessionManager.getUserDetails();
        binding.txtUser.setText("" + userLogin.getName());
        Glide.with(getActivity()).load(APIClient.BASE_URL + "/" + userLogin.getProPic()).thumbnail(Glide.with(getActivity()).load(R.drawable.tprofile)).into(binding.imgProfile);

        LinearLayoutManager mLayoutManager1 = new LinearLayoutManager(getActivity());
        mLayoutManager1.setOrientation(LinearLayoutManager.HORIZONTAL);
        binding.recyclerBanner.setLayoutManager(mLayoutManager1);
        binding.recyclerBanner.setItemAnimator(new DefaultItemAnimator());




        binding.recyclerviewOperate.setLayoutManager(new GridLayoutManager(getActivity(), 3, VERTICAL, false));
        binding.recyclerviewOperate.setItemAnimator(new DefaultItemAnimator());

        binding.recyclerviewMylorry.setLayoutManager(new GridLayoutManager(getActivity(), 1, RecyclerView.HORIZONTAL, false));
        binding.recyclerviewMylorry.setItemAnimator(new DefaultItemAnimator());


        binding.pullToRefresh.setOnRefreshListener(() -> {
            getHome(); // your code
            binding.pullToRefresh.setRefreshing(false);
        });

        getHome();
        return view;
    }

    private void getHome() {

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("owner_id", userLogin.getId());
            RequestBody bodyRequest = RequestBody.create(jsonObject.toString(), MediaType.parse("application/json"));
            Call<JsonObject> call = APIClient.getInterface().getHomePage(bodyRequest);
            GetResult getResult = new GetResult(getActivity());
            getResult.setMyListener(this);
            getResult.callForLogin(call, "1");
            custPrograssbar.prograssCreate(getActivity());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }


    @Override
    public void callback(JsonObject result, String callNo) {

        try {
            custPrograssbar.closePrograssBar();
            if (callNo.equalsIgnoreCase("1")) {
                Gson gson = new Gson();
                Home home = gson.fromJson(result.toString(), Home.class);
                homeData = home.getHomeData();
                switch (homeData.getIsVerify()) {
                    case "0":
                        binding.txtIsverryfy.setCompoundDrawablesWithIntrinsicBounds(null, null, getActivity().getDrawable(R.drawable.ic_document_pending), null);
                        break;
                    case "1":
                        binding.txtIsverryfy.setCompoundDrawablesWithIntrinsicBounds(null, null, getActivity().getDrawable(R.drawable.ic_document_process), null);
                        break;
                    case "2":
                        binding.txtIsverryfy.setCompoundDrawablesWithIntrinsicBounds(null, null, getActivity().getDrawable(R.drawable.ic_document_done), null);
                        break;
                    case "3":
                        binding.txtIsverryfy.setCompoundDrawablesWithIntrinsicBounds(null, null, getActivity().getDrawable(R.drawable.ic_unverified), null);

                        break;
                    case "4":
                        binding.txtIsverryfy.setCompoundDrawablesWithIntrinsicBounds(null, null, getActivity().getDrawable(R.drawable.ic_unverified), null);

                        break;
                    case "5":
                        binding.txtIsverryfy.setCompoundDrawablesWithIntrinsicBounds(null, null, getActivity().getDrawable(R.drawable.ic_unverified), null);

                        break;
                    default:
                        break;
                }
                binding.txtIsverryfy.setText("" + homeData.getTopMsg());

                sessionManager.setStringData(SessionManager.currency, home.getHomeData().getCurrency());
                BannerAdapter bannerAdp = new BannerAdapter(getActivity(), home.getHomeData().getBanner());
                binding.recyclerBanner.setAdapter(bannerAdp);
                binding.recyclerBanner.startAutoRotation();
                if (home.getHomeData().getBidLorryData().size() != 0) {
                    binding.txtMylorry.setVisibility(View.VISIBLE);
                }
                binding.recyclerviewMylorry.setAdapter(new HomeLorryAdapter(getActivity(), home.getHomeData().getBidLorryData()));

                binding.recyclerviewOperate.setAdapter(new OperatAdapter(getActivity(), home.getHomeData().getStatelist()));
            }

        } catch (Exception e) {
            Log.e("Error", "--> " + e.getMessage());

        }
    }


    @Override
    public void onClickHomeLorryInfo(String item, int position) {
        Log.e("item", item);
    }

    public void onBindClick(View view) {
        int id = view.getId();
        if (id == R.id.lvl_findload) {
            if (homeData.getIsVerify().equalsIgnoreCase("2")) {
                startActivity(new Intent(getActivity(), FindLoadActivity.class));
            } else if (!homeData.getIsVerify().equalsIgnoreCase("1")) {
                startActivity(new Intent(getActivity(), IdentityVerifyActivity.class).putExtra("isverry", homeData.getIsVerify()));
            } else {
                Toast.makeText(getActivity(), homeData.getTopMsg(), Toast.LENGTH_LONG).show();
            }
        } else if (id == R.id.lvl_nearload) {
            if (homeData.getIsVerify().equalsIgnoreCase("2")) {
                startActivity(new Intent(getActivity(), NearLoadActivity.class));
            } else if (!homeData.getIsVerify().equalsIgnoreCase("1")) {
                startActivity(new Intent(getActivity(), IdentityVerifyActivity.class).putExtra("isverry", homeData.getIsVerify()));
            } else {
                Toast.makeText(getActivity(), homeData.getTopMsg(), Toast.LENGTH_LONG).show();
            }
        } else if (id == R.id.lvl_attachlorry) {
            if (homeData.getIsVerify().equalsIgnoreCase("2")) {
                startActivity(new Intent(getActivity(), AddLorryActivity.class));
            } else if (!homeData.getIsVerify().equalsIgnoreCase("1")) {
                startActivity(new Intent(getActivity(), IdentityVerifyActivity.class).putExtra("isverry", homeData.getIsVerify()));
            } else {
                Toast.makeText(getActivity(), homeData.getTopMsg(), Toast.LENGTH_LONG).show();
            }
        } else if (id == R.id.img_noti) {
            startActivity(new Intent(getActivity(), NotificationActivity.class));
        } else if (id == R.id.img_profile) {
            if (HomeActivity.getInstance() != null) {
                HomeActivity.getInstance().profileMenuClick();
            }
        }
    }
}