package com.sheep.gamegroup.view.activity;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PagerSnapHelper;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.alibaba.fastjson.JSONObject;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.kfzs.appstore.utils.adapter.recyclerview.RecyclerViewAdapter;
import com.kfzs.duanduan.cardview.CardLinearSnapHelper;
import com.kfzs.duanduan.cardview.CardScaleHelper;
import com.sheep.gamegroup.helper.ScalableCardHelper;
import com.sheep.gamegroup.model.api.ICallBack;
import com.sheep.gamegroup.model.entity.BaseMessage;
import com.sheep.gamegroup.model.entity.DialogConfig;
import com.sheep.gamegroup.model.entity.FriendAndAwardEntity;
import com.sheep.gamegroup.model.entity.PictureInvitationEntity;
import com.sheep.gamegroup.model.entity.UserEntity;
import com.sheep.gamegroup.model.util.SheepSubscriber;
import com.sheep.gamegroup.util.CommonUtil;
import com.sheep.gamegroup.util.DataUtil;
import com.sheep.gamegroup.util.FastJsonUtils;
import com.sheep.gamegroup.util.GlideImageLoader;
import com.sheep.gamegroup.util.ListUtil;
import com.sheep.gamegroup.util.StringUtils;
import com.sheep.gamegroup.util.ViewHolder;
import com.sheep.gamegroup.util.ViewUtil;
import com.sheep.gamegroup.view.adapter.AdbCommonRecycler;
import com.sheep.gamegroup.view.dialog.DialogShare;
import com.sheep.jiuyan.samllsheep.BuildConfig;
import com.sheep.jiuyan.samllsheep.R;
import com.sheep.jiuyan.samllsheep.SheepApp;
import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
import com.sheep.jiuyan.samllsheep.utils.G;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMWeb;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import butterknife.BindView;
import butterknife.ButterKnife;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;

import static com.sheep.gamegroup.util.UMConfigUtils.Event.LINK_SHARE;
import static com.sheep.gamegroup.util.UMConfigUtils.Event.QR_COPY;
import static com.sheep.gamegroup.util.UMConfigUtils.Event.SHARE_TO_QQ;
import static com.sheep.gamegroup.util.UMConfigUtils.Event.SHARE_TO_WEIXIN_CIRCLE;
import static com.sheep.gamegroup.util.UMConfigUtils.Event.SHARE_TO_WX;
import static com.sheep.gamegroup.util.ViewUtil.getNetImgByName;

/**
 * created on：2018/9/4 on 15:09
 * created by: YSL
 * 描述:
 */
public class InvitationActivity extends AppCompatActivity implements ScalableCardHelper.OnPageChangeListener {
    @BindView(R.id.ask_share_list)
    RecyclerView ask_share_list;
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;
    @BindView(R.id.img_baseactivity_title)
    ImageView ivBack;

    GridLayoutManager gridLayoutManager;
    UserEntity userEntity = DataUtil.getInstance().getUserEntity();
    private FriendAndAwardEntity mEntity;
    private List<PictureInvitationEntity> mPictureList = new ArrayList<>();

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_invitation);
        ButterKnife.bind(this);
        initView();
        initListener();
        initData();
        getPictureList();
    }

    private void initView() {
//        tvTitle.setText("邀请赚钱");
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                InvitationActivity.this.finish();
            }
        });
    }
    private RecyclerViewAdapter<PictureInvitationEntity> mRecyclerViewAdapter;
    private void initListener() {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(mRecyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false));
        mRecyclerView.setNestedScrollingEnabled(false);

        mRecyclerViewAdapter = new RecyclerViewAdapter<PictureInvitationEntity>(mRecyclerView.getContext(), R.layout.item_image2, mPictureList) {
            @Override
            public void convert(com.kfzs.appstore.utils.adapter.recyclerview.ViewHolder viewHolder, final PictureInvitationEntity item, int i) {
                ImageView image_full = viewHolder.getView(R.id.image_full);
                ImageView image_bottom = viewHolder.getView(R.id.image_bottom);
//                GlideImageLoader.roundedCornersImage1(image_full, item.getPicture(), (int) getResources().getDimension(R.dimen.content_padding_8));
                viewList.put(i, viewHolder.itemView);
                Glide.with(SheepApp.getInstance())
                        .load(item.getPicture())
                        .listener(new RequestListener<Drawable>() {
                            @Override
                            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                item.setLoaded(false);
                                return false;
                            }

                            @Override
                            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                item.setLoaded(true);
                                return false;
                            }
                        })
                        .apply(new RequestOptions().centerCrop().transform(new RoundedCorners((int) getResources().getDimension(R.dimen.content_padding_8))))
                        .into(image_full);
                GlideImageLoader.saveAndSetRqImage(image_bottom, item.getLink(), 800);
            }

        };
        mRecyclerView.setAdapter(mRecyclerViewAdapter);
//        CardLinearSnapHelper cardLinearSnapHelper = new CardLinearSnapHelper();
//        cardLinearSnapHelper.attachToRecyclerView(mRecyclerView);
        CardScaleHelper cardLinearSnapHelper = new CardScaleHelper();
        cardLinearSnapHelper.attachToRecyclerView(mRecyclerView);
//        PagerSnapHelper cardLinearSnapHelper = new PagerSnapHelper();
//        cardLinearSnapHelper.attachToRecyclerView(mRecyclerView);
//        ScalableCardHelper cardHelper = new ScalableCardHelper(this);
//        cardHelper.attachToRecyclerView(mRecyclerView);
    }
    private SparseArray<View> viewList = new SparseArray<>();

    private void init(final String url, final String description) {
        gridLayoutManager = new GridLayoutManager(this, 5);
        ask_share_list.setLayoutManager(gridLayoutManager);
        final List<String> list = ListUtil.emptyList();
        list.add(DialogShare.FACE_TO_FACE);
        list.add(DialogShare.WX);
        list.add(DialogShare.QQ);
        list.add(DialogShare.WEIXIN_CIRCLE);
        list.add(DialogShare.COPY_SHARE_LINK);
        final List<String> imgList = ListUtil.emptyList();
        imgList.add("share_face_to_face");
        imgList.add("share_wx");
        imgList.add("share_qq");
        imgList.add("share_weixin_circle");
        imgList.add("share_copy_share_link");
        final List<String> nameList = ListUtil.emptyList();
        nameList.add("面对面");
        nameList.add("微信");
        nameList.add("QQ好友");
        nameList.add("朋友圈");
        nameList.add("复制链接");
        AdbCommonRecycler<String> adapter = new AdbCommonRecycler<String>(this, list) {
            @Override
            public int getViewIdByType(int type) {
                return R.layout.ask_to_share_item;
            }

            @Override
            public void convert(ViewHolder holder, final String item) {
                View itemView = holder.itemView;
                if (item == null)
                    return;
                ImageView ask_to_share_item_img = itemView.findViewById(R.id.ask_to_share_item_img);
                TextView ask_to_share_item_name = itemView.findViewById(R.id.ask_to_share_item_name);
                final int position = holder.getAdapterPosition();
                GlideImageLoader.setImage(ask_to_share_item_img, getNetImgByName(imgList.get(position)));
                ask_to_share_item_name.setText(nameList.get(position));
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        File file = null;
                        switch (position){
                            case 1://qq
                            case 2://wx
                                PictureInvitationEntity picItem = ListUtil.getItem(mPictureList, curPosition);
                                if(picItem != null && picItem.isLoaded()) {
                                    try {
                                        String fileName = String.format(Locale.CHINA, "share%d%s%d.jpg", position, BuildConfig.FLAVOR, picItem.getPicture().hashCode());
                                        file = new File(ClassFileHelper.DIR, fileName);
                                        if (!file.exists()) {
                                            file = ViewUtil.saveImage(viewList.get(curPosition), ClassFileHelper.DIR, fileName);
                                        }
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                } else {
                                    G.showToast("图片正在加载中，请稍等");
                                    return;
                                }
                                break;

                        }
                        popShare(InvitationActivity.this, url, item, description, file);
                    }
                });
            }
        };
        ask_share_list.setAdapter(adapter);
    }


    /**
     * 分享 url type 拼接
     */
    public String jointString(String url, @DialogShare.SHARE_TYPE String type) {
        if (url.contains("&type="))
            return url;
        switch (type) {
            case "qq":
                return url + "&type=2";
            case "wx":
                return url + "&type=1";
            default:
                return url + "&type=4";
        }
    }

    /**
     * 分享
     *
     * @param activity
     * @param url
     * @param type        qq wx all
     * @param description
     */
    public void popShare(Activity activity, final String url, @DialogShare.SHARE_TYPE String type, String description, File file) {
        if (activity == null || TextUtils.isEmpty(type) || TextUtils.isEmpty(url)) {
            return;
        }
        final String realUrl = jointString(url, type);
        SHARE_MEDIA share_media;
        switch (type) {
            case DialogShare.ALL:
                ViewUtil.newInstance().showShare(activity, realUrl, description);
                return;
            case DialogShare.FACE_TO_FACE:
                ViewUtil.showQR(activity, realUrl);
                return;
            case DialogShare.COPY_SHARE_LINK:
                LINK_SHARE.onEvent();
                ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("分享链接").setMsg(realUrl)
                        .setMsgMore("他人通过该链接加入小绵羊即可成为你的好友").setMsgMoreColor(R.color.txt_black_9e9c9c)
                        .setBtnLeftText("复制链接").setBtnLeftOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                QR_COPY.onEvent();
                                StringUtils.CopyText(realUrl);
                                G.showToast("复制链接成功");
                            }
                        }));
                return;
            case DialogShare.QQ:
                SHARE_TO_QQ.onEvent();
                share_media = SHARE_MEDIA.QQ;
                break;
            case DialogShare.WX:
                SHARE_TO_WX.onEvent();
                share_media = SHARE_MEDIA.WEIXIN;
                break;
            case DialogShare.WEIXIN_CIRCLE:
            default:
                SHARE_TO_WEIXIN_CIRCLE.onEvent();
                share_media = SHARE_MEDIA.WEIXIN_CIRCLE;
                break;
        }
        UMImage umImage;
        switch (type){
            case DialogShare.QQ:
            case DialogShare.WX:
                umImage = new UMImage(activity, file);
                break;
            default:
                umImage = new UMImage(activity, R.mipmap.icon);
                break;
        }
        UMWeb umWeb = new UMWeb(realUrl);
        umWeb.setTitle(activity.getResources().getString(R.string.app_name));
        umWeb.setThumb(umImage);
        umWeb.setDescription(TextUtils.isEmpty(description) ? activity.getResources().getString(R.string.app_name) : description);
        switch (type){
            case DialogShare.QQ:
            case DialogShare.WX:
                new ShareAction(activity)
                        .setPlatform(share_media)
                        .withMedia(umImage)
                        .setCallback(new CommonUtil.UMShareListener())
                        .share();
                break;
            default:
                new ShareAction(activity)
                        .setPlatform(share_media)
                        .withMedia(umWeb)
                        .setCallback(new CommonUtil.UMShareListener())
                        .share();
                break;
        }
    }

    public void initData() {
        ViewUtil.newInstance().showProgress(this);
        SheepApp.getInstance().getNetComponent().getApiService().FriendCountAndAward()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
                    @Override
                    public void onError(BaseMessage baseMessage) {
                        ViewUtil.newInstance().hideProgress(InvitationActivity.this);
                        if (BuildConfig.DEBUG)
                            G.showToast(baseMessage);
                    }

                    @Override
                    public void onNext(BaseMessage baseMessage) {
                        if (baseMessage != null) {
                            mEntity = baseMessage.getData(FriendAndAwardEntity.class);
                            ViewUtil.newInstance().hideProgress(InvitationActivity.this);
                            getmEntity();
                        }

                    }
                });


    }

    private void getmEntity() {
        CommonUtil.getInstance().updateUserInfo(new Action1<UserEntity>() {
            @Override
            public void call(UserEntity result) {
                if (result != null) {
                    userEntity = result;
                    init(userEntity.getShareLink(), mEntity.getShare_desc());
                }
            }
        });
    }

    private int curPosition = 0;
    @Override
    public void onPageSelected(int position) {
        curPosition = position;
    }

    /**
     * 来获取邀请图片，
     */
    private void getPictureList() {
        SheepApp
                .getInstance()
                .getNetComponent()
                .getApiService()
                .getSharePicture()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
                    @Override
                    public void onNext(BaseMessage baseMessage) {
                        mPictureList.addAll(baseMessage.getDataList(PictureInvitationEntity.class));
                        mRecyclerViewAdapter.notifyDataSetChanged();
                    }

                    @Override
                    public void onError(BaseMessage baseMessage) {
                    }
                });
    }


}
