// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
const db = cloud.database()
const _ = db.command

exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    const openid = wxContext.OPENID

    const { roomId, memberOpenid } = event

    if (!roomId) {
        return { success: false, msg: '缺少 roomId' }
    }

    try {
        const roomRef = db.collection('rooms').doc(roomId)
        const room = await roomRef.get()

        if (!room.data) {
            return { success: false, msg: '房间不存在' }
        }

        const roomData = room.data
        const members = roomData.members || []

        // 确定要移除的成员
        const targetOpenid = memberOpenid || openid  // 如果没有指定，默认移除自己

        // 检查是否在房间内
        const memberIndex = members.findIndex(m => m.openid === targetOpenid)
        if (memberIndex === -1) {
            return { success: false, msg: '该成员不在房间内' }
        }

        // 权限检查：只有创建者可以移除其他人，任何人都可以退出自己
        if (targetOpenid !== openid && roomData._openid !== openid) {
            return { success: false, msg: '只有创建者可以移除其他成员' }
        }

        // 检查是否是创建者试图退出
        if (targetOpenid === roomData._openid) {
            return { success: false, msg: '创建者不能退出，请删除聚会' }
        }

        // 移除成员
        const updatedMembers = members.filter(m => m.openid !== targetOpenid)

        await roomRef.update({
            data: {
                members: _.set(updatedMembers)
            }
        })

        // 如果房间已有计算结果，清除结果（因为成员变化了）
        if (roomData.status === 'calculated') {
            await roomRef.update({
                data: {
                    status: _.set('active'),
                    lastCalculatedMembers: _.set('')  // 清除成员快照
                }
            })
        }

        return {
            success: true,
            msg: targetOpenid === openid ? '已退出聚会' : '已移除成员'
        }

    } catch (err) {
        console.error('RemoveMember Error:', err)
        return {
            success: false,
            msg: '操作失败',
            error: err.message || err.toString()
        }
    }
}
