package com.edufound.reader.adapter;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.GradientDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;

import com.edufound.reader.R;
import com.edufound.reader.activity.WebActivity;
import com.edufound.reader.bean.ChannelCodeEnum;
import com.edufound.reader.bean.CommentListBean;
import com.edufound.reader.bean.HttpResultBean;
import com.edufound.reader.bean.HttpResultDataListBean;
import com.edufound.reader.bean.UserRecordBean;
import com.edufound.reader.cusview.AutoPollRecyclerView;
import com.edufound.reader.cusview.RvListJzvdStd;
import com.edufound.reader.util.Consts;
import com.edufound.reader.util.EfunboxUtil;
import com.edufound.reader.util.GlideUtils;
import com.edufound.reader.util.OkHttpClient;
import com.edufound.reader.util.ShapeCreator;
import com.edufound.reader.util.SizeUtils;
import com.edufound.reader.videoutil.JZMediaIjk;
import com.google.gson.reflect.TypeToken;
import com.okhttplib.HttpInfo;
import com.okhttplib.callback.Callback;
import com.orhanobut.logger.Logger;

import java.io.IOException;
import java.util.List;

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

import cn.jzvd.JZDataSource;
import cn.jzvd.Jzvd;
import cn.jzvd.JzvdStd;

public class SlideVideoAdapter extends RecyclerView.Adapter<VideoHolder> {
    private LayoutInflater mLayoutInflater;
    private Activity mContext;
    private List<UserRecordBean> mListData;


    public SlideVideoAdapter(Activity context, @NonNull List<UserRecordBean> data) {
        mContext = context;
        mLayoutInflater = LayoutInflater.from(context);
        this.mListData = data;
    }


    public void addMored(List<UserRecordBean> listData) {
        mListData.addAll(listData);
    }


    public String getItemType(int position) {
        return mListData.get(position).getUserRead().getType();
    }

    @NonNull
    @Override
    public VideoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new VideoHolder(mContext, mLayoutInflater.inflate(R.layout.adapter_item_slidevideo, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull VideoHolder holder, int position) {
//        holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN);
        holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class, mListData.get(position).getUserRead().getId());
        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
            GlideUtils.loadImageSizeKipMemoryCache(mContext, mListData.get(position).getUserRead().getCoverImg(), holder.mVideo.posterImageView);
        }

        holder.mVideo.startPreloading();

        /**
         * type=READ(用户朗读的)
         * type=EXAMPLE(官方的)
         * */
        holder.mItemView.setTag(mListData.get(position).getUserRead().getType());
        holder.itemView.setTag(mListData.get(position).getUserRead().getType());
        if (mListData.get(position).getUserRead().getType().equals("READ") || mListData.get(position).getUserRead().getType().equals("EXAMPLE")) {
//            AAA代替EXAMPLE
            holder.initDanMu(mListData.get(position).getUserRead().getId());
            holder.mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                    if (b) {
                        holder.mMarqueen.setVisibility(View.VISIBLE);
                        holder.mMarqueen.start();
                    } else {
                        holder.mMarqueen.setVisibility(View.INVISIBLE);
                        holder.mMarqueen.stop();
                    }
                }
            });
        } else if (mListData.get(position).getUserRead().getType().equals("AA")) {
            //这里修改成新的type。就可以使用了
            holder.mSwitch.setVisibility(View.INVISIBLE);
            holder.mEventBtn.setVisibility(View.VISIBLE);
            holder.mEventBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    EfunboxUtil.toWebFlowerActivity(mContext);
                }
            });
            TextView textView = new TextView(mContext);
            textView.setLayoutParams(new LinearLayout.LayoutParams(SizeUtils.dp2px(mContext, 200), LinearLayout.LayoutParams.MATCH_PARENT));
            //左上圆角
            holder.mTagLayout.removeAllViews();
            ShapeCreator.create()
                    .setCornerRadiusLT(50)
                    .setCornerRadiusRB(50)
                    .setSolidColor(mContext.getResources().getColor(R.color.grassgreen))
                    .into(textView);
            holder.mTagLayout.addView(textView);
            holder.mTagLayout.setVisibility(View.VISIBLE);
        } else {

        }

//        holder.mVideo.posterImageView.setImageURI(Uri.parse(mListData.get(position).videoUrl));

    }

    @Override
    public void onViewDetachedFromWindow(@NonNull VideoHolder holder) {
        super.onViewDetachedFromWindow(holder);
//        holder.mSwitch.setChecked(false);
    }

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


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

class VideoHolder extends RecyclerView.ViewHolder {
    public View mItemView;
    public RvListJzvdStd mVideo;
    public AutoPollRecyclerView mMarqueen;
    public Switch mSwitch;
    public ImageView mEventBtn;
    public LinearLayout mTagLayout;
    public Activity mContext;

    public VideoHolder(Activity context, @NonNull View itemView) {
        super(itemView);
        mContext = context;
        mItemView = itemView;
        mVideo = itemView.findViewById((R.id.slidevideo_video));
        mSwitch = itemView.findViewById(R.id.slidevideo_video_switch);
        mEventBtn = itemView.findViewById(R.id.adapter_item_slidevideo_event_btn);
        mTagLayout = itemView.findViewById(R.id.adapter_item_slidevideo_tagLayout);
        mTagLayout.setVisibility(View.GONE);
        mEventBtn.setVisibility(View.GONE);
        mSwitch.setVisibility(View.INVISIBLE);
//        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
        mMarqueen = itemView.findViewById(R.id.slidevideo_video_marqueen);
        mSwitch.setChecked(false);
        if (mSwitch.isChecked()) {
            mMarqueen.setVisibility(View.VISIBLE);
            mMarqueen.start();
        } else {
            mMarqueen.setVisibility(View.INVISIBLE);
            mMarqueen.stop();
        }
//        }

    }


    public void initDanMu(String exampleId) {
        OkHttpClient.doGetAsync(mContext, new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/posts/list").addParam("columnId", exampleId).addParam("pageNo", String.valueOf(1)).addParam("pageSize", "1000"), new Callback() {
            @Override
            public void onSuccess(HttpInfo info) throws IOException {
                HttpResultBean<HttpResultDataListBean<CommentListBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<CommentListBean>>>() {
                }.getType());

                if (bean.getData().getList() == null || bean.getData().getList().size() == 0) {
                    Logger.e("没有弹幕");
                    mSwitch.setVisibility(View.INVISIBLE);
                    return;
                }
                mSwitch.setVisibility(View.VISIBLE);
                SlideVideoDanMarqueenAdapter adapter = new SlideVideoDanMarqueenAdapter(mContext, bean.getData().getList());
                mMarqueen.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
                mMarqueen.addItemDecoration(new SpacesItemDecoration(SizeUtils.dp2px(mContext, 23)));
                mMarqueen.setAdapter(adapter);
            }

            @Override
            public void onFailure(HttpInfo info) throws IOException {
                Logger.e("获取弹幕失败:" + info.getRetDetail());
            }
        });
    }
}

class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpacesItemDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.left = space;
        outRect.right = space;
//        outRect.bottom = space;
        // Add top margin only for the first item to avoid double space between items
    }
}