package com.artfess.integrate.consts;

import com.artfess.base.util.AppUtil;
import com.artfess.integrate.model.SysExternalUnite;
import com.artfess.integrate.persistence.manager.SysExternalUniteManager;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * 微信公众号常量
 *
 * @author pangquan
 */
public class WeChatOffAccConsts {

    public final static String METHOD_GET = "GET";

    public final static String METHOD_POST = "POST";

    private final static String OPEN_AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize";
    private final static String WX_URL = "https://api.weixin.qq.com/sns/oauth2";
    private final static String WX_Base_Url = "https://api.weixin.qq.com";

    public static SysExternalUnite getUnite() {
        SysExternalUniteManager manager = AppUtil.getBean(SysExternalUniteManager.class);
        return manager.getWeChatOfficialAccounts();
    }

    public static String generateMenuUrl(String baseUrl, String corpId) throws UnsupportedEncodingException {
        String redirectUri = baseUrl + "/weChatOffAcc?redirect=" + baseUrl + "/home";
        return OPEN_AUTHORIZE_URL + "?appid=" + corpId + "&redirect_uri=" + URLEncoder.encode(redirectUri, "UTF-8")
                + "&response_type=code&scope=snsapi_base&state=artfess#wechat_redirect";
    }

    /**
     * 通过code appid secret 获取access_token
     *
     * @param code
     * @return
     */
    public static String getWxAccessToken(String code) {
        SysExternalUnite unite = getUnite();
        String url = WX_URL + "/access_token?appid=" + unite.getCorpId() + "&secret=" + unite.getCorpSecret() + "&code="
                + code + "&grant_type=authorization_code";
        return url;
    }

    /**
     * 防止token超时refresh刷新 access_token
     *
     * @param appid refreshToken
     * @return
     */
    public static String refreshToken(String refreshToken) {
        SysExternalUnite unite = getUnite();
        String url = WX_URL + "/refresh_token?appid=" + unite.getCorpId() + "&grant_type=refresh_token"
                + "&refresh_token=" + refreshToken;
        return url;
    }

    /**
     * 通过access_token openid获取用户基本信息
     *
     * @param access_token openid
     * @return
     */
    public static String getWxUserInfo(String access_token, String openid) {

        String url = WX_Base_Url + "/sns/userinfo?access_token=" + access_token + "&openid=" + openid;
        return url;
    }

    /**
     * 微信公众号发送模板消息
     *
     * @return
     */
    public static String send(String access_token) {
        String url = WX_Base_Url + "/cgi-bin/message/template/send?access_token=" + access_token;
        return url;
    }

    public static String getTokenUrl() {
        SysExternalUnite unite = getUnite();
        String url = WX_Base_Url + "/token?grant_type=client_credential&appid=" + unite.getCorpId() + "&secret="
                + unite.getCorpSecret();
        return url;
    }

    public static String getWxAuthorize(String paramStr) throws UnsupportedEncodingException {
        SysExternalUnite unite = getUnite();
        String corpId = unite.getCorpId();
        String baseUrl = unite.getBaseUrl() + "/weChatOffAcc?params=" + paramStr;
        String redirect = URLEncoder.encode(baseUrl, "utf-8");
        String url = OPEN_AUTHORIZE_URL + "?appid=" + corpId + "&redirect_uri=" + redirect
                + "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";

        return url;
    }
}
