package android.didikee.sample;

import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.didikee.donate.AlipayDonate;
import android.didikee.donate.WeiXinDonate;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {

    public static final int REQUEST_CODE = 2233;

    public static final String Donate_USER_INPUT = "FKX06601UW0I4UBLQA8Q56";
    public static final String Donate_1 = "FKX01162H9X5Q0WTZZDVD0";
    public static final String Donate_5 = "FKX02513XN2AOJEYBO2NC9";
    public static final String Donate_10 = "FKX08442ZKTRLVH22COB54";
    public static final String Donate_18 = "FKX03752CDIPICFNASSL46";
    public static final String Donate_Merchant = "stx00187oxldjvyo3ofaw60";//商家收款
    private RadioGroup radioGroup;
    private Button btAlipayCustom;
    private Button btAlipayFree;
    private Button btAlipayMerchant;

    private int currentMoney = 0;
    private boolean isGooglePlay = true;
    private TextView noticeTextView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.bt_weixin).setOnClickListener(this);
        noticeTextView = ((TextView) findViewById(R.id.notice));
        btAlipayCustom = ((Button) findViewById(R.id.bt_alipay));
        btAlipayFree = ((Button) findViewById(R.id.bt_alipay_free));
        btAlipayMerchant = ((Button) findViewById(R.id.bt_alipay_merchant));
        radioGroup = ((RadioGroup) findViewById(R.id.radio_group));
        radioGroup.setOnCheckedChangeListener(this);
        radioGroup.getChildAt(0).performClick();

        btAlipayCustom.setOnClickListener(this);
        btAlipayFree.setOnClickListener(this);
        btAlipayMerchant.setOnClickListener(this);

        checkPlatfrom();
    }

    private void checkPlatfrom() {
        ApplicationInfo applicationInfo = null;
        try {
            applicationInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (applicationInfo == null) return;
        String value = applicationInfo.metaData.getString("PAY_TYPE");
        isGooglePlay = "Google".equalsIgnoreCase(value);

        //layout notice
        noticeTextView.setText(getResources().getString(isGooglePlay ? R.string.msg_google_pay_limit : R.string.msg_pay_notice));
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (isGooglePlay) {
            // 支付限制,改为图片展示
            doGoogle(id);
        } else {
            // 正常情况下
            doNormal(id);
        }

    }

    private String endString = "图片只做演示参考,以实际场景为准。";

    private void doGoogle(int id) {
        switch (id) {
            case R.id.bt_weixin:
                //微信捐赠
                showDonateTipDialog();
                break;
            case R.id.bt_alipay:
                // 自定义价格
                gotoTipShowActivity("支付宝捐赠--自定义价格", "在实际操作中用户选中相应的价格即可,无需手动输入,用户体验最好。" + endString, R.drawable.p1);
                break;
            case R.id.bt_alipay_free:
                // 用户手动输入金额
                gotoTipShowActivity("支付宝捐赠--用户填写", "在实际操作中用户必须手动输入金额。灵活度高,用户可以捐赠随意金额。" + endString, R.drawable.p1);
                break;
            case R.id.bt_alipay_merchant:
                // 商户收款
                gotoTipShowActivity("支付宝捐赠--商户收款", "在实际操作中用户必须手动输入金额。灵活度高,用户可以捐赠随意金额。(能使用其他支付方式)" + endString, R.drawable
                        .p2);
                break;
        }
    }

    private void gotoTipShowActivity(String title, String tip, int bgRes) {
        Intent tipIntent = new Intent(this, TipActivity.class);
        tipIntent.putExtra("title", title);
        tipIntent.putExtra("tip", tip);
        tipIntent.putExtra("res", bgRes);
        startActivity(tipIntent);
    }

    private void doNormal(int id) {
        switch (id) {
            case R.id.bt_weixin:
                //微信捐赠
                checkPermissionAndDonateWeixin();
                break;
            case R.id.bt_alipay:
                // 自定义价格
                if (currentMoney == 1) {
                    donateAlipay(Donate_1);
                } else if (currentMoney == 5) {
                    donateAlipay(Donate_5);
                } else if (currentMoney == 10) {
                    donateAlipay(Donate_10);
                } else if (currentMoney == 18) {
                    donateAlipay(Donate_18);
                }
                break;
            case R.id.bt_alipay_free:
                // 用户手动输入金额
                donateAlipay(Donate_USER_INPUT);
                break;
            case R.id.bt_alipay_merchant:
                // 商户收款
                donateAlipay(Donate_Merchant);
                break;
        }
    }

    @Override
    public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
        RadioButton checkedRadioButton = (RadioButton) group.findViewById(checkedId);
        String text = checkedRadioButton.getText().toString().trim();
        currentMoney = Integer.valueOf(text.replace("元", "").trim());
        btAlipayCustom.setText("支付宝捐赠(" + currentMoney + "元)");
    }

    /**
     * 支付宝支付
     * @param payCode 收款码后面的字符串;例如:收款二维码里面的字符串为 https://qr.alipay.com/stx00187oxldjvyo3ofaw60 ,则
     *                payCode = stx00187oxldjvyo3ofaw60
     *                注:不区分大小写
     */
    private void donateAlipay(String payCode) {
        boolean hasInstalledAlipayClient = AlipayDonate.hasInstalledAlipayClient(this);
        if (hasInstalledAlipayClient) {
            AlipayDonate.startAlipayClient(this, payCode);
        }
    }

    private void checkPermissionAndDonateWeixin() {
        //检测微信是否安装
        if (!WeiXinDonate.hasInstalledWeiXinClient(this)) {
            Toast.makeText(this, "未安装微信客户端", Toast.LENGTH_SHORT).show();
            return;
        }
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            //已经有权限
            showDonateTipDialog();
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
        }
    }

    private void showDonateTipDialog() {
        new AlertDialog.Builder(this)
                .setTitle("微信捐赠操作步骤")
                .setMessage("点击确定按钮后会跳转微信扫描二维码界面:\n\n" + "1. 点击右上角的菜单按钮\n\n" + "2. 点击'从相册选取二维码'\n\n" + "3. 选择第一张二维码图片即可\n\n")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (isGooglePlay){
                            gotoTipShowActivity("微信捐赠", "在实际操作中用户必须手动输入金额。" + endString, R.drawable.p3);
                        }else {
                            donateWeixin();
                        }

                    }
                })
                .setNegativeButton("取消", null)
                .show();
    }

    /**
     * 需要提前准备好 微信收款码 照片,可通过微信客户端生成
     */
    private void donateWeixin() {
        InputStream weixinQrIs = getResources().openRawResource(R.raw.didikee_weixin);
        String qrPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "AndroidDonateSample" + File.separator +
                "didikee_weixin.png";
        WeiXinDonate.saveDonateQrImage2SDCard(qrPath, BitmapFactory.decodeStream(weixinQrIs));
        WeiXinDonate.donateViaWeiXin(this, qrPath);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            donateWeixin();
        } else {
            Toast.makeText(this, "权限被拒绝", Toast.LENGTH_LONG).show();
        }
    }

}