// 云函数入口文件
// 云函数入口文件
const cloud = require('wx-server-sdk')
const {
    MD5
} = require("./MD5.js")


cloud.init({
    env: 'dev-house-0tiax',
    traceUser: true,
})
const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    const openId = wxContext.OPENID

    // 获取管理员权限级别
    if (event.type === 'adminInfo') {
        let res = await db.collection('AdminStator').where({ '_openid': openId }).field({ 'name': true, 'level': true }).get()
        return res
    }

    // 获取管理员列表
    if (event.type === 'AdminList') {
        let count = await db.collection('AdminStator').where({ '_openid': openId }).count()
        // 再次验证是否为管理员
        if (count.total) {
            var res = await db.collection('AdminStator').orderBy('level', 'asc').get()
        } else {
            var res = {
                'data': []
            }
        }
        return res
    }

    // 添加管理员
    if (event.type === 'add-admin') {
        let data = event.data
        let name = event.name
        let phone = event.phone
        let avatarUrl = event.avatarUrl
        let updatetime = event.updatetime
        // 修改状态
        let ChangeStats = await db.collection('TempCllection')
            .where({
                _id: data.id
            })
            .update({
                data: {
                    stats: true
                }
            })
        // let total = await db.collection('AdminStator').where({ '_openid': openId }).count()
        // 更新成功，添加管理员
        if (ChangeStats.stats.updated) {
            // 添加管理员
            let add = await db.collection('AdminStator')
                .add({
                    data: {
                        _openid: openId,
                        name: name,
                        phone: phone,
                        level: 1,
                        avatarUrl: avatarUrl,
                        updatetime: updatetime
                    }
                })

            if (add.errMsg == "collection.add:ok") {
                // 删除记录
                let remove = await db.collection('TempCllection').doc(data.id).remove()
                if (remove.stats.removed) {
                    // 完成
                    var res = {
                        'code': 200,
                        'errMsg': 'ok'
                    }
                } else {
                    // 失败
                    var res = {
                        'code': 400,
                        'errMsg': 'err'
                    }
                }
            } else {
                // 失败
                var res = {
                    'code': 400,
                    'errMsg': 'err'
                }
            }
        } else {
            // 失败
            var res = {
                'code': 400,
                'errMsg': 'err'
            }
        }
        return res
    }

    // 删除管理员
    if (event.type === 'delete-admin') {
        let info = await db.collection('AdminStator').where({ '_openid': openId }).get()
        // 再次验证是否为超级管理员
        if (info.data[0].level === 0) {
            // 检查需要删除的管理员的openid是否与自己的相同
            if (event.openid != openId) {
                var remove = await db.collection('AdminStator')
                    .where({
                        _id: event.ID,
                        _openid: event.openid,
                        name: event.name,
                        phone: event.phone
                    }).remove()
                var res = {
                    'stats': remove.stats.removed,
                    'errMsg': 'collection.remove:ok'
                }
            } else {
                // 提示不能删除自己
                var res = {
                    'stats': -999,
                    'errMsg': 'collection.remove:ok'
                }
            }
        } else {
            var res = {
                'stats': -100,
                'errMsg': 'collection.remove:ok'
            }
        }
        return res
    }

    // 获取二维码
    if (event.type === 'qrcode') {
        let info = await db.collection('AdminStator').where({ '_openid': openId }).get()
        // 再次验证是否为超级管理员
        if (info.data[0].level === 0) {
            // 生成随机码
            // 生成10位的随机数字符串
            let chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
            let str = "";
            let n = 25
            for (var i = 0; i < n; i++) {
                var id = Math.ceil(Math.random() * 35);
                str += chars[id];
            }
            // 对字符串MD5加密
            let md5 = MD5(str)
            let code = str + md5.toUpperCase() + str
            // var res = await db.collection('AdminStator').orderBy('level','asc').get()
            var add = await db.collection('TempCllection')
                .add({
                    data: {
                        'stats': false,
                        'code': code,
                        'updatetime': event.updatetime
                    }
                })
            // 数据写入成功
            if (add.errMsg == 'collection.add:ok') {
                var res = {
                    'id': add._id,
                    'stats': false,
                    'code': code,
                    'updatetime': event.updatetime
                }
            } else {
                var res = {
                    'id': '',
                    'stats': '',
                    'code': '',
                    'updatetime': event.updatetime
                }
            }
        } else {
            var res = {
                'id': '',
                'stats': false,
                'code': '',
                'updatetime': event.updatetime
            }
        }
        return { 'data': res }
    }

}