var loginClass = function () {
    this.showLoginDialog = function (query = {}, returnUrl) {
        // M站对接小程序，若当前存在routeFlag则跳转至小程序登录页面
        if (sessionStorage.getItem('routeFlag') == '微信小程序') {
            let sourcePage = query.sourcePage ? query.sourcePage : ''
            jumpUprPage('vx_return.html?to=login&returnUrl=' + encodeURIComponent(returnUrl || window.location.href) + '&sourcePage=' + sourcePage)
        } else if (sessionStorage.getItem('routeFlag') == 'APP') {
            logOutInMiniProgram({})
        } else {
            jumpUprPageNew(`loginNew.html`, query)
        }
    }

}
//loading 初始化
var loading_Class = function () {
    this.showLoading = function (noPanel) {
        if ($('body').find(".loadingParent").length == 0) {
            var loadingHtml = '';
            loadingHtml += '<div class="loadingParent">';
            if (noPanel) {

            } else {
                loadingHtml += '<div class="loading"></div>';
            }
            loadingHtml +=
                '<div class="loadingDiv"><img style="width:75%" src="/static/html/images/imgsNew/loading.gif"/></div>';
            loadingHtml += '</div>';
            $("body").css("overflow", "hidden");
            $('body').append(loadingHtml);
        }
    }
    this.closeLoading = function () {
        $('body').find(".loadingParent").remove();
        $("body").css("overflow-x", "hidden");
        $("body").css("overflow-y", "auto");
    }
}

var loadingClass = new loading_Class();
var loginObj = new loginClass();

function closeLoginDialog() {
    $('body').find(".loginDiv").remove();
    $("body").css("overflow", "auto");
    localStorage.removeItem("LOGIN_SOURCE_PAGE")
}

function getValue(url) {
    //获取最后一个/的位置
    var site = url.lastIndexOf("\/");
    //截取最后一个/后的值
    return url.substring(site + 1, url.length);
}

function loginBack_(result, username, mode, isQr, isBind) {
    // 登录成功后
    sessionStorage.removeItem('loginError')
    sessionStorage.removeItem('randomKey')
    console.log(result, username, mode, isQr, isBind, '登录信息')
    userInfo = result;
    //神策设置公共属性
    sensors.registerPage({
        platform_name: sessionStorage.getItem('routeFlag') ? sessionStorage.getItem('routeFlag') : "M站",
        cust_cd: function () {
            if (userInfo !== undefined && userInfo['customerCode'] !== '') {
                return userInfo['customerCode'];
            } else {
                return "";
            }
        },
        is_login_status: function () {
            return true
        },
        current_role: function () {
            return ""
        },
        union_id: sessionStorage.getItem('union_id') ? sessionStorage.getItem('union_id') : ''
    });
    sensors.login(result.userCode)
    window.TINGYUN && window.TINGYUN.setUid(result.userCode);
    var login_method;
    var login_name;
    switch (mode) {
        case 1:
            login_method = '手机验证码登录'
            login_name = username.replace(/\s/g, "")
            break;
        case 2:
            login_method = '账号登录'
            login_name = username
            break;
        case 3:
            login_method = '微信登录'
            login_name = userInfo.checkUserInfo.loginId
            break;
        case 4:
            login_method = '苹果登录'
            break;
    }
    sensors.track('LoginResult', {
        login_method: login_method,
        is_success: true,
        login_name: login_name,
        fail_reason: '',
        cust_cd: userInfo.customerCode ? userInfo.customerCode : '',
        source_page: sourcePageSensors()
    })
    if (!isNull(userInfo.customerCode)) {
        karteTrackerUser(userInfo.userCode, userInfo.customerCode);
    } else {
        karteTrackerUser(userInfo.userCode, "--");
    }
    localStorage.setItem("userInfo", JSON.stringify(result));
    //登录成功，保存sessionId
    saveAllCookie();
    closeLoginDialog();
    sendMATrack("mc_user_login", {});
    sendMAIdentify();
    sendconvertLabTrack("c_user_login", {});
    getCustomerInfo();
    getCheckSession();
    writeCookieUrlList(userInfo.createCookieUrlList); // 同步登录
    if (isNull(userInfo.checkUserInfo.cellularPhone)) {
        localStorage.setItem('bindPhoneModal', '1')
    } else {
        localStorage.setItem('bindPhoneModal', '8')
    }
    if (isQr) {
        goto()
    } else {
        var href = window.location.href
        //这里主要是为了限制自动登录成功后 只有这些页面才走跳转的公共方法 其他页面保持在当前页
        if (href.indexOf('loginNew.html') != -1 || href.indexOf('register.html') != -1 || href.indexOf('lpLogin.html') != -1 || href.indexOf('loginBind.html') != -1) {
            if (isBind) {
                commonBack('bindSuccess')
            } else {
                if (mode == 3) {
                    commonBack('wxLogin')
                } else {
                    commonBack('login')
                }

            }
        } else {
            location.reload()
        }
    }
}

//判断是否已经引入css js
function isInclude_(name) {
    var js = /js$/i.test(name);
    var es = document.getElementsByTagName(js ? 'script' : 'link');
    for (var i = 0; i < es.length; i++)
        if (es[i][js ? 'src' : 'href'].indexOf(name) != -1) return true;
    return false;
}

//加载外部css文件
function loadCss_(url) {
    if (!isInclude_(getValue(url))) {
        $("<link>")
            .attr({
                rel: "stylesheet",
                type: "text/css",
                href: url + "?t=" + new Date().getTime()
            })
            .appendTo("head");
    }

}

//加载外部js文件
function loadJs_(src, callback) {
    if (!isInclude_(getValue(src))) {
        var script = document.createElement('script'),
            head = document.getElementsByTagName('head')[0];
        script.type = 'text/javascript';
        script.charset = 'UTF-8';
        script.src = src + "?t=" + new Date().getTime();
        if (script.addEventListener) {
            script.addEventListener('load', function () {
                callback();
            }, false);
        } else if (script.attachEvent) {
            script.attachEvent('onreadystatechange', function () {
                var target = window.event.srcElement;
                if (target.readyState == 'loaded') {
                    callback();
                }
            });
        }
        head.appendChild(script);
    } else {
        callback()
    }

}

/* 调用PC接口，获取用户数据 */
function getCustomerInfo(callback) {
    if (judgeIsLogin()) return false;
    loadingClass.showLoading();
    var param = {};
    var action = WebUtils.preReferPCApiParam(api_customerInfo, false, true, false);
    WebUtils.ajaxGetSubmit(action, param,
        function (result) { //success
            loadingClass.closeLoading();
            if (result && result.errorList && result.status && result.status >= 400) {
                getCustomerInfoBack(result.status, JSON.stringify(result))
            } else {
                if (result != undefined) {
                    getCustomerInfoBack(200, result); // 这个主要是为了设置customerInfo, 并做统一的错误处理
                    callback && callback(200, result);
                } else {
                    getCustomerInfoBack("-1", "系统错误");
                }
            }

        },
        function (error) { //error
            loadingClass.closeLoading();
            getCustomerInfoBack(error.status, WebUtils.getErrorRes(error));
        },
        function (XHR, TS) { //complete
            loadingClass.closeLoading();
        });
}

/* 调用PC接口，获取用户数据 */
function getCustomerInfo2(callback) {
    if (judgeIsLogin()) return false;
    var param = {};
    var action = WebUtils.preReferPCApiParam(api_customerInfo, false, true, false);
    WebUtils.ajaxGetSubmit(action, param,
        function (result) { //success
            loadingClass.closeLoading();
            if (result && result.errorList && result.status && result.status >= 400) {
                getCustomerInfoBack(result.status, JSON.stringify(result))
            } else {
                if (result != undefined) {
                    getCustomerInfoBack(200, result); // 这个主要是为了设置customerInfo, 并做统一的错误处理
                    callback && callback(200, result);
                } else {
                    getCustomerInfoBack("-1", "系统错误");
                }
            }
        },
        function (error) { //error
            getCustomerInfoBack(error.status, WebUtils.getErrorRes(error));
            loadingClass.closeLoading();
        },
        function (XHR, TS) { //complete
            loadingClass.closeLoading();
        });
}

function setCustomerInfo(data) {
    if (data === undefined || data === null) {
        customerInfo = {};
        localStorage.removeItem("customerInfo");
    } else {
        customerInfo = data;
        localStorage.setItem("customerInfo", JSON.stringify(data));
    }

}

function getCustomerInfoBack(code, result) {
    loadingClass.showLoading();
    code = parseInt(code);
    if (code === 200) {
        let data = msmParseJSON(result);
        setCustomerInfo(data);
        if (result.customerCode !== undefined) {
            sensors.registerPage({
                platform_name: sessionStorage.getItem('routeFlag') ? sessionStorage.getItem('routeFlag') : "M站",
                // cust_code:result.customerCode,
                cust_cd: function () {
                    return result.customerCode
                },
                is_login_status: function () {
                    return !!localStorage.getItem("userInfo");
                },
                current_role: function () {
                    return ""
                },
                is_login_status: true,
                union_id: sessionStorage.getItem('union_id') ? sessionStorage.getItem('union_id') : ''
            });
        }
    } else {
        setCustomerInfo({});  // 接口出错时，清空前者的记录
        if (code < 0) {
            AlertDialog.alert(result, "错误信息");
        } else if (code === 401 || code === 403) {
            showLoginDialog();
        } else {
            var data = msmParseJSON(result);
            if (data != undefined && data.errorList != undefined && data.errorList.length > 0) {
                if (data.errorList[0].errorCode != ECODE_API000300) {
                    AlertDialog.alert(data.errorList[0].errorMessage, "错误信息");
                }
            }
        }
    }
}

// 设置loginCheckSession
function setLoginCheckSession(data) {
    if (data === undefined || data === null) {
        loginCheckSession = {};
        localStorage.removeItem("loginCheckSession");
    } else {
        loginCheckSession = data;
        localStorage.setItem("loginCheckSession", JSON.stringify(data));
    }
}

// 获取session
function getCheckSession(callback) {
    if (judgeIsLogin()) return false;
    loadingClass.showLoading();
    var param = {};
    var action = WebUtils.preReferPCApiParam(api_check_session);
    WebUtils.ajaxGetSubmit(action, param,
        function (result) { //success
            if (result != undefined) {
                getCheckSessionBack(200, result);
                callback && callback(200, result);
            } else {
                getCheckSessionBack("-1", "系统错误");
            }
        },
        function (error) { //error
            getCheckSessionBack(error.status, WebUtils.getErrorRes(error));
        },
        function (XHR, TS) { //complete
            loadingClass.closeLoading();
        });
}

function getCheckSessionBack(code, result) {
    loadingClass.closeLoading();
    code = parseInt(code);
    if (code === 200) {
        let data = msmParseJSON(result);
        setLoginCheckSession(data);
    } else {
        setLoginCheckSession({}); // 接口出错时，清空前者的记录
        if (code < 0) {
            AlertDialog.alert(result, "错误信息");
        } else if (code === 401 || code === 403) {
            showLoginDialog();
        } else {
            var data = msmParseJSON(result);
            if (data != undefined && data.errorList != undefined && data.errorList.length > 0) {
                if (data.errorList[0].errorCode != ECODE_API000300) {
                    AlertDialog.alert(data.errorList[0].errorMessage, "错误信息");
                }
            }
        }
    }
}

// 同步登录
function writeCookieUrlList(cookieUrlList) {
    // cgiを呼び出す不可視のimgタグをbodyに追加することで他ドメインのcookieを操作する
    // NOTE: クラス名つけて前にappendしたエレメントを削除した方が良さそうだがect-webもしてないのでやらない
    (cookieUrlList || []).forEach(function (url) {
        // ect-web側で出力しているimgタグにそろえている
        const image = new Image(1, 1);
        image.src = url;
        image.style.position = `absolute`;
        image.style.top = `0px`;
        image.style.left = `0px`;
        image.hidden = true;
        // WARNING: documentに直接書き込むようなコードは本来書くべきではありません
        document.body.appendChild(image);
    });
}


// 没有sessionId时要跳转到登录页
function judgeIsLogin() {
    if (!userInfo || !userInfo.sessionId) {
        loadingClass.closeLoading();
        showLoginDialog();
        return true;
    }
    return false;
}

//登录 注册 企业相关页面统一跳转页面方法
function commonBack(page, noRedirect) {
    //parseUrlQueryAfterDecode这个方法是 先分割在解码 应对back_url里面有&符号的情况
    var windowUrlParams = parseUrlQueryAfterDecode();
    var backUrl = windowUrlParams.back_url
    var jumpMode = windowUrlParams.jumpmode
    if (backUrl) {
        //如果有back_url  且jumpmode=1 直接跳转 其他情况回首页跳转
        if (jumpMode == 1) {
            if (windowUrlParams.activity === "college") {
                window.college.init()
            } else if (windowUrlParams.lpXinke === "lpxinke") {
                if (userInfo && userInfo.sessionId) {
                    if (userInfo && userInfo.checkUserInfo && userInfo.checkUserInfo.customerCode) {
                        window.location.href = backUrl
                    } else {
                        window.location.href = jumpUrl + '/static/html/page/enterpriseInfoPrefect.html'
                    }
                } else {
                    gotoIndex()
                }
            } else if (windowUrlParams.lpXinke == "lpxinkeRegist") {
                if (userInfo && userInfo.sessionId) {
                    window.location.href = backUrl

                } else {
                    gotoIndex()
                }

            } else {
                window.location.href = backUrl
            }
        } else {
            localStorage.setItem('indexRedirectUrl', backUrl)
            gotoIndex()
        }

    } else {
        //没有back_url的情况 也就是从哪来回哪去功能
        if (noRedirect) {
            //如果有登录信息 又没有backurl 进入登录或者注册页面 直接跳转到首页 不做从哪来回哪去 加了个参数 是为了防止本地localStorage redirect之前就有值的情况
            gotoIndex()
        } else {
            var host = `${document.location.protocol}//${document.location.host}`
            var path = `${host}/static/html/page/`
            if (localStorage.getItem('redirect')) {
                //值存在
                let redirect = JSON.parse(localStorage.getItem('redirect'))
                localStorage.removeItem('redirect')
                switch (redirect.from) {
                    case 'complexProduct':
                        window.location.href = `${redirect.url}`
                        // sessionStorage.setItem('isBack', 'true')
                        // //因为退回的页面 会用到这个值在重新赋值上 那个页面用完后 会移除掉
                        // localStorage.setItem('redirect', JSON.stringify(redirect))
                        // //这里回退是要分区页面的
                        // switch (page) {
                        //     case 'login':
                        //         //普通登录页面 账号登录 验证码登录 微信登录（不是跳绑定，是直接成功登录的情况）
                        //         history.go(-1)
                        //         break;
                        //     case 'wxLogin':
                        //         //微信登录成功
                        //         history.go(-2)
                        //         break;
                        //     case 'bindSuccess':
                        //         //登录-微信登录-绑定成功
                        //         history.go(-3)
                        //         break;
                        //     case 'registerSuccess':
                        //         //登录-注册-注册成功
                        //         history.go(-3)
                        //         break;
                        //     case 'bindRegisterSuccess':
                        //         //登录-微信登录-绑定-注册-注册成功
                        //         history.go(-5)
                        //         break;
                        //     case 'enterprise':
                        //         //登录-注册-注册成功-加入企业成功 或者 完善企业成功
                        //         history.go(-4)
                        //         break;
                        //     case 'bindEnterprise':
                        //         //登录-微信登录-绑定-注册-注册成功-加入企业成功 或者 完善企业成功
                        //         history.go(-6)
                        //         break;
                        //     default:
                        //         //默认情况
                        //         history.go(-1)
                        //         break;
                        // }
                        break;
                    case 'caseList':
                        if (page == 'login') {
                            //登录完成回案例库 用后退方案不知道为什么会直接跳过案例库页面 导致无法回去
                            window.location.replace(`${host}${redirect.url}`)
                        } else {
                            //其他情况全部回首页
                            gotoIndex()
                        }
                        break;
                    case 'share':
                        window.location.href = `${host}${redirect.url}`
                        break;
                    case 'writeBlessing':
                        window.location.href = `${redirect.url}`
                        break;
                    case 'cart':
                        window.location.href = `${path}cart.html`
                        break;
                    case 'myTab':
                        window.location.href = `${path}my.html`
                        break;
                    case 'signTwelve':
                        window.location.href = `${path}signInTwelve.html`
                        break;
                    case 'common':
                        window.location.href = `${redirect.url}`
                        break;
                    default:
                        localStorage.setItem('indexRedirectUrl', redirect.url)
                        gotoIndex()
                        break;
                }

            } else {
                gotoIndex()
            }
        }

    }
}
