package com.yxz.alitop;

import android.app.Activity;
import android.content.Intent;
import android.util.Log;

import com.ali.auth.third.core.model.Session;
import com.ali.auth.third.login.LoginService;
import com.ali.auth.third.ui.context.CallbackContext;
import com.alibaba.baichuan.android.trade.AlibcTrade;
import com.alibaba.baichuan.android.trade.callback.AlibcTradeCallback;
import com.alibaba.baichuan.android.trade.model.AlibcShowParams;
import com.alibaba.baichuan.android.trade.model.OpenType;
import com.alibaba.baichuan.android.trade.page.AlibcBasePage;
import com.alibaba.baichuan.android.trade.page.AlibcDetailPage;
import com.alibaba.baichuan.android.trade.page.AlibcMyOrdersPage;
import com.alibaba.baichuan.trade.biz.AlibcConstants;
import com.alibaba.baichuan.trade.biz.context.AlibcResultType;
import com.alibaba.baichuan.trade.biz.core.taoke.AlibcTaokeParams;
import com.alibaba.baichuan.trade.biz.login.AlibcLogin;
import com.alibaba.baichuan.trade.biz.login.AlibcLoginCallback;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.alibaba.baichuan.android.trade.AlibcTradeSDK;
import com.alibaba.baichuan.trade.biz.context.AlibcTradeResult;
import com.facebook.react.bridge.WritableMap;

import java.util.HashMap;
import java.util.Map;

//import com.alibaba.baichuan.
/**
 * Created by wangfaguo on 2018/5/24.
 */

public class RNAlitopModule  extends ReactContextBaseJavaModule {


    public RNAlitopModule(ReactApplicationContext context) {
        super(context);
    }

    @Override
    public String getName() {
        return "RNAliTop";
    }

    //判断是否登录
    @ReactMethod
    public void isLogin(Callback callback){
        AlibcLogin alibcLogin = AlibcLogin.getInstance();
        WritableMap map = Arguments.createMap();
        if(alibcLogin.isLogin()){
            map.putInt("isLogin",1);
        }else{
            map.putInt("isLogin",0);

        }
        callback.invoke(map);
    }
    //登录
    @ReactMethod
    public void login(final Callback callback){
        final AlibcLogin alibcLogin = AlibcLogin.getInstance();
        if(!alibcLogin.isLogin()){
//            alibcLogin.showLogin();
            alibcLogin.showLogin(new AlibcLoginCallback(){
                @Override
                public void onSuccess(int i) {
                    Session user = alibcLogin.getSession();
                    String nick = user.nick;
                    String avatarUrl = user.avatarUrl;
                    String openId = user.openId;
                    String openSid = user.openSid;
                    String topAccessToken = user.topAccessToken;
                    String topAuthCode = user.topAuthCode;

                    WritableMap map = Arguments.createMap();
                    map.putInt("code", 0);
                    map.putString("nick", nick);
                    map.putString("avatarUrl", avatarUrl);
                    map.putString("openId", openId);
                    map.putString("openSid", openSid);
                    map.putString("topAccessToken", topAccessToken);
                    map.putString("topAuthCode", topAuthCode);
                    callback.invoke(map);
                }

                @Override
                public void onFailure(int code, String message) {
                    WritableMap map = Arguments.createMap();
                    map.putInt("code", code);
                    map.putString("msg", message);
                    callback.invoke(map);
                }
            });
        }else{
            Session user = alibcLogin.getSession();
            String nick = user.nick;
            String avatarUrl = user.avatarUrl;
            String openId = user.openId;
            String openSid = user.openSid;
            String topAccessToken = user.topAccessToken;
            String topAuthCode = user.topAuthCode;

            WritableMap map = Arguments.createMap();
            map.putInt("code", 0);
            map.putString("nick", nick);
            map.putString("avatarUrl", avatarUrl);
            map.putString("openId", openId);
            map.putString("openSid", openSid);
            map.putString("topAccessToken", topAccessToken);
            map.putString("topAuthCode", topAuthCode);
            callback.invoke(map);
        }


    }

    //详情页
    @ReactMethod
    public void showItemDetailPage(String itemId, int type,final Callback callback){
        final AlibcLogin alibcLogin = AlibcLogin.getInstance();
        if(!alibcLogin.isLogin()){
            alibcLogin.showLogin(new AlibcLoginCallback(){
                @Override
                public void onSuccess(int i) {
                    Session user = alibcLogin.getSession();
                    String nick = user.nick;
                    String avatarUrl = user.avatarUrl;
                    String openId = user.openId;
                    String openSid = user.openSid;
                    String topAccessToken = user.topAccessToken;
                    String topAuthCode = user.topAuthCode;

                    WritableMap map = Arguments.createMap();
                    map.putInt("code", 0);
                    map.putString("nick", nick);
                    map.putString("avatarUrl", avatarUrl);
                    map.putString("openId", openId);
                    map.putString("openSid", openSid);
                    map.putString("topAccessToken", topAccessToken);
                    map.putString("topAuthCode", topAuthCode);
                    callback.invoke(map);
                }

                @Override
                public void onFailure(int code, String message) {
                    WritableMap map = Arguments.createMap();
                    map.putInt("code", code);
                    map.putString("msg", message);
                    callback.invoke(map);
                }
            });
            return;
        }
        final Activity activity = getCurrentActivity();
        if (activity == null) {
            WritableMap map = Arguments.createMap();
            map.putInt("code", -1);
            map.putString("msg", "Activity doesn't exist");
            callback.invoke(map);
            return;
        }
        AlibcShowParams showParams = new AlibcShowParams();
        showParams.setOpenType(OpenType.Auto);
        if(type == 1){
            showParams.setOpenType(OpenType.Native);

        }else if(type == 2){
            showParams.setOpenType(OpenType.H5);
        }
//        showParams.setBackUrl("tbopen24883648://");
        showParams.setBackUrl("tbopen23140447");

        Map<String, String> exParams = new HashMap<>();
//        exParams.put(AlibcConstants.ISV_CODE, "appisvcode");
        AlibcBasePage itemDetailPage = new AlibcDetailPage(itemId);
        AlibcTrade.show(activity,itemDetailPage,showParams,null,exParams,new AlibcTradeCallback(){
            @Override
            public void onTradeSuccess(AlibcTradeResult alibcTradeResult) {
                WritableMap map = Arguments.createMap();
                map.putInt("code", 0);
                if(alibcTradeResult.resultType == AlibcResultType.TYPECART){
                    map.putString("type","addCard");
                }
                if(alibcTradeResult.resultType == AlibcResultType.TYPEPAY){
                    map.putString("type","paySuccess");
                }
//                map.putArray("paySuccessOrders",alibcTradeResult.payResult.paySuccessOrders);
                callback.invoke(map);
            }

            @Override
            public void onFailure(int code, String msg) {
                WritableMap map = Arguments.createMap();
                map.putInt("code", code);
                map.putString("msg", msg);
                callback.invoke(map);
            }
        });

    }
    //订单页面
    /**
     * 创建我的订单列表页面
     *
     * param status 所要展示订单的订单状态
     *  0: 为全部订单
     *  1: 为待付款订单
     *  2: 为待发货订单
     *  3: 为待收货订单
     *  4: 为待评价订单
     * param isAllOrder  是否显示全部订单
     *
     *  YES: 显示全部订单
     *  NO : 显示ISV自己创建的订单
     *
     * return 我的订单列表页面
     */
    @ReactMethod
    public void myOrdersPage(int status,final Callback callback){
        final Activity activity = getCurrentActivity();
        if (activity == null) {
            WritableMap map = Arguments.createMap();
            map.putInt("code", -1);
            map.putString("msg", "Activity doesn't exist");
            callback.invoke(map);
            return;
        }
        AlibcShowParams showParams = new AlibcShowParams();
        showParams.setOpenType(OpenType.Auto);
        showParams.setOpenType(OpenType.H5);
//        showParams.setBackUrl("tbopen24883648://");23140447
        showParams.setBackUrl("tbopen23140447");
        Map<String, String> exParams = new HashMap<>();
//        exParams.put(AlibcConstants.ISV_CODE, "appisvcode");
        AlibcBasePage itemOrderPage = new AlibcMyOrdersPage(status,false);
        AlibcTrade.show(activity,itemOrderPage,showParams,null,exParams,new AlibcTradeCallback(){
            @Override
            public void onTradeSuccess(AlibcTradeResult alibcTradeResult) {
                WritableMap map = Arguments.createMap();
                map.putInt("code", 0);
                if(alibcTradeResult.resultType == AlibcResultType.TYPECART){
                    map.putString("type","addCard");
                }
                if(alibcTradeResult.resultType == AlibcResultType.TYPEPAY){
                    map.putString("type","paySuccess");

                }
                callback.invoke(map);
            }

            @Override
            public void onFailure(int code, String msg) {
                WritableMap map = Arguments.createMap();
                map.putInt("code", code);
                map.putString("msg", msg);
                callback.invoke(map);
            }
        });
    }

//    @Override
//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        CallbackContext.onActivityResult(this, requestCode, resultCode, data);
//    }

}
