package org.apache.cordova.sharkshare;

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

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.onekeyshare.ShareContentCustomizeCallback;
import cn.sharesdk.onekeyshare.themes.classic.ClassicTheme;
import cn.sharesdk.wechat.friends.Wechat;

/**
 * This class echoes a string called from JavaScript.
 */
public class SharkShare extends CordovaPlugin {
    private String title, content, image, url;

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("share")) {
            share(args, callbackContext);
        }
        return true;
    }


    private void share(JSONArray args, CallbackContext callbackContext) throws JSONException {
        title = args.getString(0);
        content = args.getString(1);
        image = args.getString(2);
        url = args.getString(3);

        ShareSDK.initSDK(cordova.getActivity());
        OnekeyShare oks = new OnekeyShare();
        oks.setTitle(title);
        //oks.setText(content + url);
        oks.setUrl(url);
        if (!image.equals("")) {
            oks.setImageUrl(image);
        }

        oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {
            @Override
            public void onShare(Platform platform,
                                cn.sharesdk.framework.Platform.ShareParams paramsToShare) {
                if ("SinaWeibo".equals(platform.getName())) {
                    if (content == null) {
                        paramsToShare.setText(title + url);
                    } else {
                        paramsToShare.setText(content + url);
                    }
//                    if (!image.equals("")) {
//                        paramsToShare.setImageUrl(image);
//                    }
                } else if ("Wechat".equals(platform.getName())) {
                    if (!ShareSDK.getPlatform(Wechat.NAME).isClientValid()) {
                        Toast.makeText(cordova.getActivity(), "尚未安装相关客户端，分享失败", Toast.LENGTH_SHORT).show();
                    } else {
                        paramsToShare.setTitle(title);
                        paramsToShare.setText(content);
                        paramsToShare.setUrl(url);
                        paramsToShare.setImageUrl(image);
                    }
                } else if ("WechatMoments".equals(platform.getName())) {
                    if (!ShareSDK.getPlatform(Wechat.NAME).isClientValid()) {
                        Toast.makeText(cordova.getActivity(), "尚未安装相关客户端，分享失败", Toast.LENGTH_SHORT).show();
                    } else {
                        paramsToShare.setTitle(title);
                        paramsToShare.setText(content);
                        paramsToShare.setUrl(url);
                        paramsToShare.setImageUrl(image);
                    }
                } else if ("QQ".equals(platform.getName())) {
                    paramsToShare.setTitle(title);
                    paramsToShare.setTitleUrl(url);
                   // paramsToShare.setText(content);
                    String applicationName = getApplicationName();
                    paramsToShare.setSite(applicationName);
                    paramsToShare.setSiteUrl(url);
                    paramsToShare.setUrl(url);
                    if (!image.equals("")) {
                        paramsToShare.setImageUrl(image);
                    }
                }
            }
        });
        oks.setCallback(new PlatformActionListener() {
            @Override
            public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                Log.e("tag", platform.toString());
            }

            @Override
            public void onError(Platform platform, int i, Throwable throwable) {
                Log.e("tag", throwable.toString());
            }

            @Override
            public void onCancel(Platform platform, int i) {
                Log.e("tag", platform.toString());
            }
        });
        oks.show(cordova.getActivity());

        callbackContext.success();
    }


    public String getApplicationName() {
        PackageManager packageManager = null;
        ApplicationInfo applicationInfo = null;
        try {
            packageManager = cordova.getActivity().getApplicationContext().getPackageManager();
            applicationInfo = packageManager.getApplicationInfo(cordova.getActivity().getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            applicationInfo = null;
        }
        String applicationName =
                (String) packageManager.getApplicationLabel(applicationInfo);
        return applicationName;
    }


}
