package org.wcs.serve.controller.app;

import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.wcs.model.dto.serve.userGroup.AddUserGroupReq;
import org.wcs.model.dto.serve.userGroup.UpdateGroupPermissionReq;
import org.wcs.model.dto.serve.userGroup.UpdateUserGroupReq;
import org.wcs.model.vo.serve.AppServeDataResponse;
import org.wcs.model.vo.serve.AppServeResponse;
import org.wcs.model.vo.serve.userGroup.QueryUserGroupPermissionResp;
import org.wcs.model.vo.serve.userGroup.QueryUserGroupResp;
import org.wcs.serve.service.intf.IUserGroupService;

import java.util.List;

/**
 * 用户组相关操作
 */
@RestController
@RequestMapping("/app/userGroup")
@ResponseBody
@RequiredArgsConstructor
public class UserGroupController {

    private final IUserGroupService userGroupService;

    /**
     * 查找用户组级别比自己低的用户的用户组信息
     * @return 查询到的信息
     */
    @GetMapping("/queryMinLevelUserGroup")
    public AppServeDataResponse<List<QueryUserGroupResp>> queryMinLevelUserGroup() {
        return userGroupService.queryMinLevelUserGroup();
    }

    /**
     * 查询某一用户组所拥有的菜单权限
     * @param userGroup 用户组
     * @return 查询结果
     */
    @GetMapping("/queryUserGroupPermission")
    public AppServeDataResponse<List<QueryUserGroupPermissionResp>> queryUserGroupPermission(@RequestParam("userGroup") @NotBlank(message = "用户组不能为空") String userGroup) {
        return userGroupService.queryUserGroupPermission(userGroup);
    }

    /**
     * 添加一个用户组
     * @param addUserGroupReq 新用户组信息
     * @return 添加结果
     */
    @PostMapping("/addUserGroup")
    public AppServeResponse addUserGroup(@RequestBody @Validated AddUserGroupReq addUserGroupReq) {
        return userGroupService.addUserGroup(addUserGroupReq);
    }

    /**
     * 删除用户组
     * @param userGroup 用户组
     * @return 结果
     */
    @DeleteMapping("/deleteUserGroup/{userGroup}")
    public AppServeResponse deleteUserGroup(@PathVariable("userGroup") @NotBlank(message = "用户组不能为空") String userGroup) {
        return userGroupService.deleteUserGroup(userGroup);
    }

    /**
     * 更新用户组信息
     * @param updateUserGroupReq 更新信息
     * @return 更新结果
     */
    @PostMapping("/updateUserGroup")
    public AppServeResponse updateUserGroup(@RequestBody @Validated UpdateUserGroupReq updateUserGroupReq) {
        return userGroupService.updateUserGroup(updateUserGroupReq);
    }

    /**
     * 更新用户组权限
     * @param updateGroupPermissionReq 更新权限信息
     * @return 更新结果
     */
    @PostMapping("/updateGroupPermission")
    public AppServeResponse updateGroupPermission(@RequestBody @Validated UpdateGroupPermissionReq updateGroupPermissionReq) {
        return userGroupService.updateGroupPermission(updateGroupPermissionReq);
    }





}
