/**
 * 说明：
 *   用户管理相关 WEB API 都在此文件中定义。
 */

import { AxiosRequestData } from '@/data/axios_request'
import cache from "@/utils/cache"

/**
 * 根据企业税号分页查询该企业下用户信息
 * @param {String} entTaxId 企业税号
 * @param {String} entUserMobile 企业用户的手机号，选填
 * @param {Number} pageNum 当前页码，默认为1
 * @param {Number} pageSize 每页数量，默认为10
 */
function getEntUserRoleInfo(entTaxId, entUserMobile = '', pageNum = 1, pageSize = 10) {
    const url = '/auth/ent/user/findEntUserRoleInfo'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal("user")).account;
    let args = {
        entTaxId: entTaxId,
        mobile: mobile,
        pageNum: pageNum,
        pageSize: pageSize
    }
    if (entUserMobile != '') {
        args.entUserMobile = entUserMobile
    }
    console.log('根据企业税号分页查询该企业下用户信息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('根据企业税号分页查询该企业下用户信息 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 根据服务商用户手机号获取服务商下的企业用户
 * @param {String} entTaxId 企业税号
 * @param {String} entUserMobile 企业用户的手机号，选填
 * @param {Number} pageNum 当前页码，默认为1
 * @param {Number} pageSize 每页数量，默认为10
 */
function getISPEntUserInfo({ entUserMobile = '', entUserName = '', pageNum = 1, pageSize = 10 }) {
    const url = '/auth/isp/user/findEntUserInfo'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal("user")).account;
    let args = {
        mobile: mobile,
        pageNum: pageNum,
        pageSize: pageSize
    }
    if (entUserMobile != '') {
        args.entUserMobile = entUserMobile
    }
    if (entUserName != '') {
        args.entUserName = entUserName
    }
    console.log('根据服务商用户手机号获取服务商下的企业用户 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('根据服务商用户手机号获取服务商下的企业用户 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 针对单个企业的用户删除
 * @param {String} userMobile 要删除的用户手机号
 * @param {String} entTaxId 企业税号
 */
function entUserDelOnEnt(userMobile, entTaxId) {
    const url = '/auth/ent/user/delOnEnt'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal('user')).account
    let args = {
        entUserMobile: userMobile,
        entTaxId: entTaxId,
        mobile: mobile,
        reqChannel: 4,
    }
    console.log('针对单个企业的用户删除 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('针对单个企业的用户删除 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 针对单个企业的用户保存
 * @param {String} entTaxId 企业税号
 * @param {String} roleId 角色Id
 * @param {String} entUserMobile 保存用户的手机号
 * @param {String} entUserName 保存用户的用户名 （用户真实姓名）
 * @param {String} entUserEmail 保存用户的邮箱
 */
function entUserSaveOnEnt({ entTaxId, roleId, entUserMobile, entUserName, entUserEmail }) {
    const url = '/auth/ent/user/saveOnEnt'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal('user')).account
    let args = {
        entTaxId: entTaxId,
        roleId: roleId,
        entUserMobile: entUserMobile,
        mobile: mobile,
        reqChannel: 4,
    }
    if (entUserName != '' && entUserName != null) {
        args.entUserName = entUserName
    }
    if (entUserEmail != '' && entUserEmail != null) {
        args.entUserEmail = entUserEmail
    }
    console.log('针对单个企业的用户保存 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('针对单个企业的用户保存 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 服务商重置企业用户密码
 * @param {String} resetMobile 需要重置密码的手机号
 * @param {String} smsCode 服务商当前用户获取的验证码，验证服务商用户身份
 */
function resetEntUserPasswd({ resetMobile, smsCode }) {
    const url = '/auth/isp/user/resetEntUserPasswd'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal('user')).account
    let args = {
        resetMobile: resetMobile,
        smsCode: smsCode,
        mobile: mobile,
        reqChannel: 4,
    }
    console.log('服务商重置企业用户密码 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('服务商重置企业用户密码 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 获取企业用户角色
 */
function getEntCategoryRoles() {
    const url = '/auth/ent/role/findCategoryRoles'
    let token = cache.getToken()
    let args = {
    }
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('获取企业用户角色 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 服务商修改企业管理者手机号
 * @param {String} entTaxId 企业税号
 * @param {String} cusMobile 修改的企业管理者手机号
 * @param {String} cusConfirmMobile 确认修改的企业管理者手机号
 * @param {String} password 当前登录服务商用户的密码
 */
function modifyEntManager({ entTaxId, cusMobile, cusConfirmMobile, password }) {
    const url = '/auth/isp/user/updEntManager'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal('user')).account
    let args = {
        entTaxId: entTaxId,
        cusMobile: cusMobile,
        cusConfirmMobile: cusConfirmMobile,
        password: password,
        mobile: mobile,
        reqChannel: 4,
    }
    console.log('服务商修改企业管理者手机号 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('服务商修改企业管理者手机号 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 用户企业绑定信息。
 * 根据企业用户手机号获取对应管理相关信息
 * @param {String} userMobile 企业用户的手机号
 * @param {String} entTaxId 企业税号
 * @param {String} entName 企业名称
 * @param {Number} pageNum 当前页码，默认为1
 * @param {Number} pageSize 每页数量，默认为10
 */
function userEntBindInfo({ userMobile, entTaxId = "", entName = "", pageNum = 1, pageSize = 10 }) {
    const url = '/auth/ent/user/findManageInfoByMobile'
    let token = cache.getToken()
    let args = {
        entUserMobile: userMobile,
        pageNum: pageNum,
        pageSize: pageSize
    }
    if (entTaxId != '') {
        args.entTaxId = entTaxId
    }
    if (entName != '') {
        args.entName = entName
    }
    console.log('根据企业用户手机号获取对应管理相关信息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('根据企业用户手机号获取对应管理相关信息 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 系统公告信息新增或修改
 * @param {String} resetMobile 需要重置密码的手机号
 * @param {String} smsCode 服务商当前用户获取的验证码，验证服务商用户身份
 */
function msgSaveOrUpdate({ msgId, msgType, msgTitle, msgBrief, msgContent, startTime, endTime = "", enable = true }) {
    const url = '/auth/user/msg/save'
    let token = cache.getToken()
    let args = {
        msgType: msgType,
        msgTitle: msgTitle,
        msgBrief: msgBrief,
        msgContent: msgContent,
    }

    if (msgId) {
        args.msgId = msgId;
    }
    if (startTime) {
        args.startTime = startTime;
    }
    if (endTime) {
        args.endTime = endTime;
    }
    if (enable === false) {
        args.enable = enable;
    }

    console.log('系统公告信息新增或修改 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('系统公告信息新增或修改 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 点对点消息的发送
 * @param {String} msgId 消息id
 * @param {Number} msgType 消息类型可以参考消息类型枚举
 * @param {Array} receiveKeys 消息类型为企业个体消息：企业税号列表;消息类型为服务商个体消息：服务商id列表;消息类型为用户个人消息：用户id列表;消息类型为服务商下企业消息：服务商id列表
 */
function msgSend({ msgId, msgType, receiveKeys }) {
    const url = '/auth/user/msg/send'
    let token = cache.getToken()
    let args = {
        msgId: msgId,
        msgType: msgType,
        receiveKeys: receiveKeys,
    }
    console.log('点对点消息的发送 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('点对点消息的发送 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 服务商分页查询机构发布的消息
 * @param {String} createTimeBegin 创建开始时间
 * @param {String} createTimeEnd 创建结束时间
 * @param {Number} msgType 消息类型可以参考消息类型枚举
 * @param {Boolean} enable 是否有效
 * @param {Number} pageNum 当前页码  默认为1
 * @param {Number} pageSize 每页数量  默认为10
 */
function getISPMsg({ createTimeBegin = '', createTimeEnd = '', msgType = '', enable = '', pageNum = 1, pageSize = 10 }) {
    const url = '/auth/user/msg/findMsgListByIsp'
    let token = cache.getToken()
    let args = {
        pageNum: pageNum,
        pageSize: pageSize
    };
    if (createTimeBegin) {
        args.createTimeBegin = createTimeBegin;
    }
    if (createTimeEnd) {
        args.createTimeEnd = createTimeEnd;
    }
    if (msgType) {
        args.msgType = msgType;
    }
    if (enable != '' && enable != undefined && enable != null) {
        args.enable = enable;
    }
    console.log('服务商分页查询机构发布的消息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('服务商分页查询机构发布的消息 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 获取消息推送对象列表
 * @param {String} msgId 消息id
 */
function getMsgSendTarget(msgId) {
    const url = '/auth/user/msg/findSendList'
    let token = cache.getToken()
    let args = {
        msgId: msgId,
    };
    console.log('获取消息推送对象列表 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('获取消息推送对象列表 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 根据服务商用户手机号查询服务商信息
 */
function getISPInfo() {
    const url = '/auth/isp/info/findByMobile'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal('user')).account
    let args = {
        mobile: mobile,
    }
    console.log('根据服务商用户手机号查询服务商信息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('根据服务商用户手机号查询服务商信息 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 服务商管理者修改服务商自己的信息
 * @param {string} name 服务商名称
 * @param {string} contactPhone 联系人电话
 * @param {string} contactName 联系人姓名
 * @param {string} email 邮箱
 * @param {string} enable 是否有效
 * @param {string} channelSign 渠道标识代码
 * @param {string} invoiceEntTaxId 服务商指定的开票企业
 * @param {string} ispId 服务商信息id
 * @param {string} address 服务商地址
 */
function updateISPInfo({ name, contactPhone, contactName, email, enable, channelSign, invoiceEntTaxId, address = "", ispId }) {
    const url = '/auth/isp/info/update'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getLocal('user')).account
    let args = {
        name,
        contactPhone,
        contactName,
        email,
        enable,
        channelSign,
        invoiceEntTaxId,
        ispId,
        mobile: mobile,
        reqChannel: 4,
    }
    if (address) {
        args.address = address;
    }
    console.log('服务商管理者修改服务商自己的信息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('服务商管理者修改服务商自己的信息 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

const USER_MANAGEMENT = {
    getEntUserRoleInfo,
    getISPEntUserInfo,
    entUserDelOnEnt,
    entUserSaveOnEnt,
    resetEntUserPasswd,
    getEntCategoryRoles,
    modifyEntManager,
    userEntBindInfo,
    msgSaveOrUpdate,
    msgSend,
    getISPMsg,
    getMsgSendTarget,
    getISPInfo,
    updateISPInfo
}

export default USER_MANAGEMENT