/**
 * 在这个js中,集中处理来自OA的传入参数
 * 
 */

/**
 * web页面调用WPS的方法入口
 *  * info参数结构
 * info:[
 *      {
 *       '方法名':'方法参数',需要执行的方法
 *     },
 *     ...
 *   ]
 * @param {*} info
 */
let testFuncs=null;
function dispatcher(info) {
    var funcs = info.funcs;
    wps.WpsApplication().Options.UseLocalUserInfo=true//修订时,不使用登录名
    //解析参数
    /**
     * 分两种情况解析:
     * 1、业务系统依赖客户端返回:做同步处理,直接在for循环中返回
     */
    for (var index = 0; index < funcs.length; index++) {
        var func = funcs[index];
        for (var key in func) {                    
            if (key === "GetDocStatus") {
                return GetDocStatus(func[key])
            } else if (key === "ExitWPS") {
                ExitWPS(func[key])
            }
        }
    }
    /**
     * 2、业务系统不依赖客户端返回:
     * 做异步处理,先返回接收状态,再在setTimeout中做打开文档的一系列业务逻辑
     */
    setTimeout(function(){
        for (var index = 0; index < funcs.length; index++) {
            testFuncs=funcs;
            var func = funcs[index];
            for (var key in func) {
                func[key].isOA=true;
                if (key === "OpenDoc") { // OpenDoc 属于普通的打开文档的操作方式,文档落地操作
                    OpenDoc(func[key]); //进入打开文档处理函数
                } else if (key === "OnlineEditDoc") { //在线方式打开文档,属于文档不落地的方式打开
                    OnlineEditDoc(func[key]);
                } else if (key === "NewDoc") {
                    OpenDoc(func[key]);
                } else if (key === "UseTemplate") {
                    OpenDoc(func[key]);
                } else if (key === "InsertRedHead") {
                    InsertRedHead(func[key]);
                } else if (key === "taskPaneBookMark"){
                    taskPaneBookMark(func[key])
                } else if (key === "NewOfficialDocument"){
                    return OpenDoc(func[key])
                }
            }
        }
    },100)
    return {message:"ok", app:wps.WpsApplication().Name}
}


/**
 * 获取活动文档的状态
 */
function GetDocStatus() {
    let l_doc = wps.WpsApplication().ActiveDocument
    if (l_doc && pCheckIfOADoc()) {//此方法还可根据需要进行扩展
        return{
            message: "GetDocStatus",
            docstatus:{
                words: l_doc.Words.Count,
                saved: l_doc.Saved,
                pages: l_doc.ActiveWindow.Panes.Item(1).Pages.Count
            }
        }
    }    
}

/**
 * 关闭WPS活动文档并退出WPS进程
 */
function ExitWPS() {
    //为了接下来的用户确认操作,先将WPS界面激活显示在最前
    wps.WpsApplication().Activate();
    let l_doc = wps.WpsApplication().ActiveDocument
    if (l_doc && pCheckIfOADoc()) {//此方法还可根据需要进行扩展
        l_doc.Close();
    }
    if(wps.confirm("要关闭WPS软件,请确认文档都已保存。\n点击确定后关闭WPS,点击取消继续编辑。")){
        wps.WpsApplication().Quit();
    }
}

/**
 * 
 * @param {*} params  OA端传入的参数
 */
function OnlineEditDoc(OaParams) {
    if (OaParams.fileName == "") {
        NewFile(OaParams);
    } else {
        //OA传来下载文件的URL地址,调用openFile 方法打开
        OpenOnLineFile(OaParams);
    }
}

///打开来自OA端传递来的文档
function OpenDoc(OaParams) {
    if (OaParams.fileName == "") {
        NewFile(OaParams);
    } else {
        //OA传来下载文件的URL地址,调用openFile 方法打开
        OpenFile(OaParams);
    }
}

function taskPaneBookMark(OaParams){
    let filePath = OaParams.fileName
    if (filePath == "")
        return
    OpenFile(OaParams);

    //创建taskpane,只创建一次
    let id = wps.PluginStorage.getItem(constStrEnum.taskpaneid)
    if (id){
        let tp = wps.GetTaskPane(id)
        tp.Width = 300
        tp.Visible = true
    }
    else{
        let url = getHtmlURL("taskpane.html");
        let tp =  wps.CreateTaskPane(url, "书签操作")
        if (tp){
            tp.DockPosition = WPS_Enum.msoCTPDockPositionRight  //这里可以设置taskapne是在左边还是右边
            tp.Width = 300
            tp.Visible = true
            wps.PluginStorage.setItem(constStrEnum.taskpaneid, tp.ID)
        }
    }
}