package com.zoomyu.rn_zooma_alipay;

import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;

import com.alipay.sdk.app.EnvUtils;
import com.alipay.sdk.app.PayTask;
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 java.util.Map;

/**
 * Created by yuwei on 17-8-31.
 */

public class AliPayModule extends ReactContextBaseJavaModule {
    private String appId;
    private String privateKey;

    public AliPayModule(ReactApplicationContext reactContext) {
        super(reactContext);
        ApplicationInfo appInfo = null;
        try {
            appInfo = reactContext.getPackageManager().getApplicationInfo(reactContext.getPackageName(), PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            throw new Error(e);
        }
        if (!appInfo.metaData.containsKey("ALIPAY_APPID")){
            throw new Error("meta-data ALIPAY_APPID not found in AndroidManifest.xml");
        }
        if (!appInfo.metaData.containsKey("ALIPAY_TEST_PRIVATEKEY")){
            throw new Error("meta-data ALIPAY_TEST_PRIVATEKEY not found in AndroidManifest.xml");
        }
        this.appId = appInfo.metaData.get("ALIPAY_APPID").toString().substring(6);
        this.privateKey = appInfo.metaData.get("ALIPAY_TEST_PRIVATEKEY").toString();
    }

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

    @ReactMethod
    public void  pay(String info, String mode, final Promise promise) {
        EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
        final String orderInfo = sandbox();
        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                PayTask alipay = new PayTask(getCurrentActivity());
                Map<String, String> result = alipay.payV2(orderInfo,true);
                promise.resolve(result.toString());
            }
        };
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

    private String sandbox() {
        Log.i("yuwei", "sandbox: PRIVATEKEY " + appId);
        Log.i("yuwei", "sandbox: privateKey " + privateKey);
        Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(appId, true);
        String orderParam = OrderInfoUtil2_0.buildOrderParam(params);

        String sign = OrderInfoUtil2_0.getSign(params, privateKey, true);
        String orderInfo = orderParam + "&" + sign;
        return orderInfo;
    }


}
