package com.edufound.reader.adapter;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Space;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.edufound.reader.activity.RecordActivity;
import com.edufound.reader.activity.SmallFullVideoActivity;
import com.edufound.reader.bean.ModelBean;
import com.edufound.reader.bean.UserRecordBean;
import com.edufound.reader.cusview.CusToast;
import com.edufound.reader.cusview.ModelViewA;
import com.edufound.reader.cusview.ModelViewB;
import com.edufound.reader.cusview.ModelViewC;
import com.edufound.reader.cusview.ModelViewD;
import com.edufound.reader.cusview.ModelViewE;
import com.edufound.reader.cusview.ModelViewF;
import com.edufound.reader.cusview.ModelViewG;
import com.edufound.reader.cusview.ModelViewWidthA;
import com.edufound.reader.util.EfunboxUtil;
import com.google.gson.Gson;
import com.orhanobut.logger.Logger;

import java.util.ArrayList;
import java.util.List;

public class FragmentEventAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {


    private Context mContext;
    private List<ModelBean> mListModelBean;
    private showRuleOnClickListener mShowRuleOnClickListener;
    private Gson mGson;
    List<UserRecordBean> jsonBeanList;

    public FragmentEventAdapter(Context context, List<ModelBean> listData) {
        mContext = context;
        mListModelBean = listData;
        mGson = new Gson();
        jsonBeanList = new ArrayList<>();
    }

    public void setShowRuleOnClickListener(showRuleOnClickListener listener) {
        mShowRuleOnClickListener = listener;
    }


    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        if (mListModelBean.get(viewType).getTemplateCode().equals("IMAGE_TEMPLATE_1")) {
            return new IMAGETEMPLATE1(new ModelViewA(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("IMAGE_TEMPLATE_2")) {
            return new IMAGETEMPLATE1(new ModelViewWidthA(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RED_FLOWER_TEMPLATE_1")) {
            return new REDFLOWERTEMPLATE1(new ModelViewB(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("EXCELLENT_TEMPLATE_1")) {
            return new EXCELLENTTEMPLATE1(new ModelViewC(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_1")) {
            return new RACETEMPLATE1(new ModelViewD(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_2")) {
            return new RACETEMPLATE2(new ModelViewF(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_3")) {
            return new RACETEMPLATE3(new ModelViewE(mContext));
        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_4")) {
            return new RACETEMPLATE4(new ModelViewG(mContext));
        }
        return new NOITEM(new Space(mContext));
    }


    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") int position) {
        if (holder instanceof IMAGETEMPLATE1) {
            //单张图片或者是单张宽图
            ((ModelViewA) holder.itemView).setView(mListModelBean.get(position).getImg(), o -> {
                if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                    EfunboxUtil.toWebFlowerActivity(mContext, (mListModelBean.get(position)).getUrl(), String.valueOf((mListModelBean.get(position)).getId()));
                }
            });
        } else if (holder instanceof EXCELLENTTEMPLATE1) {
            //类型1优秀作品展播
            ((ModelViewC) holder.itemView).setView((mListModelBean.get(position)).getImg(), mListModelBean.get(position), mListModelBean.get(position).getReadUserList().get(0).getTopList());
            ((ModelViewC) holder.itemView).setItemClickListener(new ModelViewC.onItemClickListener() {


                @Override
                public void clickExample(ModelBean bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                        //进入官方
                        toRecordActivity(bean.getReadUserList().get(0).getExample().getId());

                    }
                }

                @Override
                public void clickItem(View view, int position, UserRecordBean bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                        //点击item
                        jsonBeanList.clear();
                        jsonBeanList.add(bean);
                        Logger.e("mGson.toJson(jsonBeanList):" + mGson.toJson(jsonBeanList));
                        toSmallFullVideoActivity(mGson.toJson(jsonBeanList));
                    }
                }

                @Override
                public void clickRule(ModelBean bean) {
                    //优秀作品没有显示规则
//                    if (mShowRuleOnClickListener != null) {
//                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
//                    }
                }
            });
        } else if (holder instanceof REDFLOWERTEMPLATE1) {
            //单图背景左右两个按钮
            ((ModelViewB) holder.itemView).setView("", "", "", "", new ModelViewB.OnClickBtnListener() {
                @Override
                public void clickLeft() {

                }

                @Override
                public void clickRight() {

                }
            });
        } else if (holder instanceof RACETEMPLATE1) {
            ((ModelViewD) holder.itemView).setView((mListModelBean.get(position)).getImg(), mListModelBean.get(position), mListModelBean.get(position).getReadUserList(), new ModelViewD.OnClickBtnListener() {
                @Override
                public void clickRule(ModelBean bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
                    }
                }

                @Override
                public void clickItem(ModelBean.ReadUserList bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
//                        CusToast.getInstance(mContext).show(bean.getExample().getTitle(), 1000);
                        toRecordActivity(bean.getExample().getId());
                    }
                }

                @Override
                public void openRankList(ModelBean.ReadUserList bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRankListWindow(bean);
                    }
                }
            });
        } else if (holder instanceof RACETEMPLATE2) {
            ((ModelViewF) holder.itemView).setView((mListModelBean.get(position)).getImg(), (mListModelBean.get(position)), new ModelViewF.ModelViewFOnItemClick() {
                @Override
                public void clickItem(ModelBean.ReadUserList bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                        toRecordActivity(bean.getExample().getId());
                    }
                }

                @Override
                public void clickRule(ModelBean bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
                    }
                }


                @Override
                public void openRankList(ModelBean.ReadUserList bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRankListWindow(bean);
                    }
                }
            });
        } else if (holder instanceof RACETEMPLATE3) {
            ((ModelViewE) holder.itemView).setView(mListModelBean.get(position).getImg(), mListModelBean.get(position), new ModelViewE.onItemClickListener() {
                @Override
                public void clickItem(View view, int position, UserRecordBean bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                        jsonBeanList.clear();
                        jsonBeanList.add(bean);
                        toSmallFullVideoActivity(mGson.toJson(jsonBeanList));
                    }
                }

                @Override
                public void clickRule(ModelBean bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
                    }
                }


                @Override
                public void clickEnter(ModelBean bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                        toRecordActivity(bean.getReadUserList().get(0).getExample().getId());
                    }
                }
            });
        } else if (holder instanceof RACETEMPLATE4) {
            ((ModelViewG) holder.itemView).setView((mListModelBean.get(position)).getImg(), (mListModelBean.get(position)), new ModelViewF.ModelViewFOnItemClick() {
                @Override
                public void clickItem(ModelBean.ReadUserList bean) {
                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
                        toRecordActivity(bean.getExample().getId());
                    }
                }

                @Override
                public void clickRule(ModelBean bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
                    }
                }

                @Override
                public void openRankList(ModelBean.ReadUserList bean) {
                    if (mShowRuleOnClickListener != null) {
                        mShowRuleOnClickListener.showRankListWindow(bean);
                    }
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        return mListModelBean.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public void toRecordActivity(String exampleId) {
        Bundle bundle = new Bundle();
        bundle.putString("exampleId", exampleId);
        Intent intent = new Intent(mContext, RecordActivity.class);
        intent.putExtra("params_bundle", bundle);
        mContext.startActivity(intent);
    }

    public void toSmallFullVideoActivity(String json) {
        Bundle bundle = new Bundle();
        bundle.putString("index", 0 + "");
        bundle.putString("dataJson", json);
        bundle.putString("intoPage", "EventFragment");
        //数据太多了。直接传不过去,通过MMKV写一下再读一下
        Intent intent = new Intent(mContext, SmallFullVideoActivity.class);
        intent.putExtra("params_bundle", bundle);
        mContext.startActivity(intent);
    }

    public interface showRuleOnClickListener {
        void showRuleWindow(String url);

        void showRankListWindow(ModelBean.ReadUserList bean);
    }
}

class NOITEM extends RecyclerView.ViewHolder {

    public NOITEM(@NonNull View itemView) {
        super(itemView);
    }
}

class IMAGETEMPLATE1 extends RecyclerView.ViewHolder {

    public IMAGETEMPLATE1(@NonNull View itemView) {
        super(itemView);
        ((ModelViewA) itemView).initView();
    }
}

class EXCELLENTTEMPLATE1 extends RecyclerView.ViewHolder {

    public EXCELLENTTEMPLATE1(@NonNull View itemView) {
        super(itemView);
        ((ModelViewC) itemView).initView();
    }
}

class REDFLOWERTEMPLATE1 extends RecyclerView.ViewHolder {

    public REDFLOWERTEMPLATE1(@NonNull View itemView) {
        super(itemView);
        ((ModelViewB) itemView).initView();
    }
}

class RACETEMPLATE1 extends RecyclerView.ViewHolder {

    public RACETEMPLATE1(@NonNull View itemView) {
        super(itemView);
        ((ModelViewD) itemView).initView();
    }
}

class RACETEMPLATE2 extends RecyclerView.ViewHolder {

    public RACETEMPLATE2(@NonNull View itemView) {
        super(itemView);
        ((ModelViewF) itemView).initView();
    }
}

class RACETEMPLATE3 extends RecyclerView.ViewHolder {

    public RACETEMPLATE3(@NonNull View itemView) {
        super(itemView);
        ((ModelViewE) itemView).initView();
    }

}

class RACETEMPLATE4 extends RecyclerView.ViewHolder {

    public RACETEMPLATE4(@NonNull View itemView) {
        super(itemView);
        ((ModelViewG) itemView).initView();
    }

}