/*
 * @Author: wufan
 * @Date: 2021-05-11 10:21:37
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-07-21 14:25:37
 * @Description: 企业微信api
 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
 * 
 */

import Platform from '@/common/js/platform';
import User from '@/common/js/user';
import Service from '@/common/js/service';

export default class WechatApi {
  static async initConfig(params = { isAgentConfig: false, url: '' }) {
    if(Platform.isWorkWx()){
      return Service.Hades('anon/hades/getWxCorpJSAPISignature', {
        storeId: User.getStoreId(),
        url: params.url,
      }).then((result) => {
        const res = result.result;
        this.config({
          beta: true, // 必须这么写，否则wx.invoke调用形式的jsapi会有问题
          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
          appId: res.appId, // 必填，企业微信的corpID
          timestamp: res.timestamp, // 必填，生成签名的时间戳
          nonceStr: res.nonceStr, // 必填，生成签名的随机串
          signature: res.signature, // 必填，签名，见 附录-JS-SDK使用权限签名算法
          jsApiList: ['chooseImage', 'shareToExternalContact', 'selectExternalContact', 'selectEnterpriseContact'],
        }).then(() => {
          if (params.isAgentConfig) {
            return new Promise(async (resolve, reject) => {
              Service.Hades('anon/hades/getWxWorkJSAPISignature', {
                storeId: User.getStoreId(),
                url: params.url,
              }).then((result2) => {
                const res2 = result2.result;
                this.agentConfig({
                  corpid: res2.corpid, // 必填，企业微信的corpid，必须与当前登录的企业一致
                  agentid: res2.agentid, // 必填，企业微信的应用id （e.g. 1000247）
                  timestamp: res2.timestamp, // 必填，生成签名的时间戳
                  nonceStr: res2.nonceStr, // 必填，生成签名的随机串
                  signature: res2.signature, // 必填，签名，见附录-JS-SDK使用权限签名算法
                  jsApiList: ['selectExternalContact', 'getCurExternalContact', 'getContext', 'shareToExternalContact', 'sendChatMessage', 'shareToExternalChat'],
                  success: (res) => {
                    console.log(res, 'res-agentconfig');
                    console.info('window.WWOpenData', window.WWOpenData);
                    resolve(res);
                  },
                  fail: (err) => {
                    console.log(1213545344545)
                    console.log(err, 'err-agentconfig');
                    reject(err);
                  },
                });
              });
            });
          }
        })
  
        
      });
    }else{
      if (params.isAgentConfig) {
        console.log(32132132,'cesgu')
        return new Promise(async (resolve, reject) => {
          Service.Hades('anon/hades/getWxWorkJSAPISignature', {
            storeId: User.getStoreId(),
            url: params.url,
          }).then((result2) => {
            const res2 = result2.result;
            this.agentConfig({
              corpid: res2.corpid, // 必填，企业微信的corpid，必须与当前登录的企业一致
              agentid: res2.agentid, // 必填，企业微信的应用id （e.g. 1000247）
              timestamp: res2.timestamp, // 必填，生成签名的时间戳
              nonceStr: res2.nonceStr, // 必填，生成签名的随机串
              signature: res2.signature, // 必填，签名，见附录-JS-SDK使用权限签名算法
              jsApiList: ['selectExternalContact', 'getCurExternalContact', 'getContext', 'shareToExternalContact', 'sendChatMessage', 'shareToExternalChat'],
              success: (res) => {
                console.log(res, 'res-agentconfig');
                console.info('window.WWOpenData', window.WWOpenData);
                resolve(res);
              },
              fail: (err) => {
                console.log(1213545344545)
                console.log(err, 'err-agentconfig');
                reject(err);
              },
            });
          });
        });
      }
    }
    
  }

  static async config(config) {
    return new Promise((resolve, reject) => {
      console.info('wx.config', config);
      wx.config(config);
      wx.ready(resolve);
      wx.error(reject);
    }).then(
      () => {
        console.info('wx.ready');
      },
      (error) => {
        console.error('wx.error', error);
        throw error;
      }
    );
  }

  static async agentConfig(config) {
    return new Promise((success, fail) => {
      console.info('wx.agentConfig', config);
      wx.agentConfig({ ...config, success, fail });
    }).then(
      (res) => {
        console.info('wx.agentConfig success', res);
        return res;
      },
      (error) => {
        console.error('wx.agentConfig fail', error);
        throw error;
      }
    );
  }

  static getCurExternalContact() {
    return new Promise((resolve, reject) => {
      wx.ready(() => {
        wx.invoke('getCurExternalContact', {}, function (res) {
          if (res.err_msg == 'getCurExternalContact:ok') {
            resolve(res.userId); //返回当前外部联系人userId
          } else {
            reject(res.err_msg); //错误处理
          }
        });
      });
    });
  }

  static getContext() {
    return new Promise((resolve, reject) => {
      wx.ready(() => {
        wx.invoke('getContext', {}, function (res) {
          if (res.err_msg == 'getContext:ok') {
            resolve(res.entry); //返回进入H5页面的入口类型，目前有normal、contact_profile、single_chat_tools、group_chat_tools、chat_attachment
          } else {
            reject(res.err_msg); //错误处理
          }
        });
      });
    });
  }
}
