async function getResource(ctx, next) {
    try {
        const models = ctx.fs.dc.models;
        console.log('models.Resource', models.Resource)
        const res = await models.Resource.findAll({

            where: { parentResource: null },
            include: [{
                model: models.Resource,
            }],
        })

        ctx.body = res;
        ctx.status = 200;

    } catch (error) {
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
        ctx.status = 400;
        ctx.body = {
            "message": "查询所有权限数据失败"
        }
    }
}
async function getUserResource(ctx, next) {
    try {
        const models = ctx.fs.dc.models;
        const { userId } = ctx.query;

        const res = await models.UserResource.findAll({
            where: { userId: userId },
            include: [{
                model: models.Resource,
            }]
        })

        ctx.body = res;
        ctx.status = 200;

    } catch (error) {
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
        ctx.status = 400;
        ctx.body = {
            "message": "查询用户权限数据失败"
        }
    }
}

async function updateUserRes(ctx, next) {
    const transaction = await ctx.fs.dc.orm.transaction();
    try {
        const models = ctx.fs.dc.models;
        const { userId, resCode, isShow } = ctx.request.body;
        console.log('isShow1', ctx.request.body)

        const res = await models.UserResource.findAll({
            attributes: ["resourceId"],
            raw: true,
            where: { userId: userId }
        })

        const addRes = resCode.filter(r => !res.some(rr => rr.resourceId == r)).map(r => { return { userId: userId, resourceId: r, isShow: isShow } });
        const delRes = res.filter(r => !resCode.includes(r.resourceId)).map(r => r.resourceId);
        addRes.length && await models.UserResource.bulkCreate(addRes, { transaction: transaction });
        delRes.length && await models.UserResource.destroy({
            where: {
                resourceId: { $in: delRes },
                userId: userId
            },
            transaction: transaction
        })
        // await models.UserResource.update({
        //     isShow: isShow

        // }, {
        //     where: {
        //         userId: userId
        //     }
        // })
        ctx.status = 204;
        await transaction.commit();

    } catch (error) {
        await transaction.rollback();
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
        ctx.status = 400;
        ctx.body = {
            "message": "更新用户权限数据失败"
        }
    }
}

async function editeUserRes(ctx, next) {
    const transaction = await ctx.fs.dc.orm.transaction()
    await transaction.commit()
    try {
        const models = ctx.fs.dc.models;
        const { userId, isShow } = ctx.request.body
        console.log('ctx.request.body1', ctx.request.body)
        await models.UserResource.update({
            isshow: isShow
        }, {
            where: {
                userId: userId
            }
        })
        ctx.status = 204;

    } catch (error) {
        await transaction.rollback()
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
        ctx.status = 400;
        ctx.body = {
            "message": "更新用户权限数据失败"
        }
    }
}
module.exports = {
    getResource,
    getUserResource,
    updateUserRes,
    editeUserRes
};