package com.zk.qpm.function;


import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewStub;
import android.widget.TextView;
import android.widget.Toast;

import com.zk.qpm.R;
import com.zk.qpm.adapter.CommonRecyclerAdapter;
import com.zk.qpm.utils.BasicInfoUtils;
import com.zk.qpm.utils.ClipboardUtils;

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

public class BasicInfoFunction implements IFunction {

    private Context mContext;

    private RecyclerView mRecyclerView;
    private CommonRecyclerAdapter<BasicInfoUtils.InfoItem> mAdapter;
    private List<BasicInfoUtils.InfoItem> mItems = new ArrayList<>();

    public BasicInfoFunction(Context context) {
        this.mContext = context;
    }

    @Override
    public int viewStubId() {
        return R.id.vs_basic_info;
    }

    @Override
    public void renderer(View layout) {
        mRecyclerView = layout.findViewById(R.id.rv_basic_info);
        mAdapter = new CommonRecyclerAdapter<BasicInfoUtils.InfoItem>(mContext, mRecyclerView, mItems, new MultiType()) {

            @Override
            protected void onBind(CommonViewHolder viewHolder, View itemView, int position, int viewType, BasicInfoUtils.InfoItem data) {
                if (BasicInfoUtils.InfoItem.TYPE_TITLE == viewType) {
                    rendererTitleItem(itemView, position, data);
                } else if (BasicInfoUtils.InfoItem.TYPE_CONTENT == viewType) {
                    rendererContentItem(itemView, position, data);
                }
            }
        };
        LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mAdapter.setLayoutManager(layoutManager, 1, Color.parseColor("#DADADA"));
        mRecyclerView.setAdapter(mAdapter);
        mItems.clear();
        mItems.addAll(BasicInfoUtils.getBaseInfo(mContext));
        mAdapter.setDatas(mItems);
    }

    private void rendererTitleItem(View itemView, int position, BasicInfoUtils.InfoItem data) {
        itemView.setOnClickListener(null);
        View dividerView = itemView.findViewById(R.id.v_divider);
        TextView titleView = itemView.findViewById(R.id.tv_title);
        if (position == 0 && data.getType() == ManifestFunction.MultiType.TYPE_TITLE) {
            dividerView.setVisibility(View.GONE);
        } else {
            dividerView.setVisibility(View.VISIBLE);
        }
        if (!TextUtils.isEmpty(data.getLabel())) {
            titleView.setText(data.getLabel());
        }
    }

    private void rendererContentItem(View itemView, int position, final BasicInfoUtils.InfoItem data) {
        itemView.setOnClickListener(null);
        TextView keyView = itemView.findViewById(R.id.tv_key);
        TextView valueView = itemView.findViewById(R.id.tv_value);
        String label = data.getLabel();
        final String content = data.getContent();

        if (!TextUtils.isEmpty(label)) {
            keyView.setText(label);
        }
        if (!TextUtils.isEmpty(content)) {
            valueView.setText(content);
            valueView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ClipboardUtils.copyText(content);
                    Toast.makeText(mContext, "已经拷贝:" + content, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
    
    public class MultiType implements CommonRecyclerAdapter.IMultiType<BasicInfoUtils.InfoItem> {

        @Override
        public int getLayoutId(int itemType) {
            if (BasicInfoUtils.InfoItem.TYPE_TITLE == itemType) {
                return R.layout.jm_gt_item_title;
            } else if (BasicInfoUtils.InfoItem.TYPE_CONTENT == itemType) {
                return R.layout.jm_gt_item_key_value;
            }
            return R.layout.jm_gt_item_title;
        }

        @Override
        public int getItemType(int position, BasicInfoUtils.InfoItem infoItem) {
            return infoItem.getType();
        }
    }

    @Override
    public ViewStub.OnInflateListener getCallback() {
        return null;
    }

}