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.user.*;
import org.wcs.model.vo.serve.AppServeDataResponse;
import org.wcs.model.vo.serve.AppServeResponse;
import org.wcs.model.vo.serve.user.LoginResp;
import org.wcs.model.vo.serve.user.QueryUserMenuPermissionSimpleTreeResp;
import org.wcs.model.vo.serve.user.QueryUserResp;
import org.wcs.model.vo.serve.user.UserPermissionResp;
import org.wcs.serve.service.intf.IUserService;

import java.util.List;

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

    private final IUserService userService;

    /**
     * 登录接口
     * @param loginReq 登录请求
     * @return 响应结果
     */
    @PostMapping("/login")
    public AppServeDataResponse<LoginResp> login(@RequestBody @Validated LoginReq loginReq) {
        return userService.login(loginReq);
    }

    /**
     * 获取用户权限
     * @return 响应结果
     */
    @GetMapping("/permission")
    public AppServeDataResponse<UserPermissionResp> permission() {
        return userService.permission();
    }

    /**
     * 查询所有用户
     * @param queryUserReq 查询用户请求
     * @return 返回结果
     */
    @PostMapping("/queryUser")
    public AppServeDataResponse<List<QueryUserResp>> queryUser(@RequestBody QueryUserReq queryUserReq) {
        return userService.queryUser(queryUserReq);
    }

    /**
     * 登出用户
     * @param userId 用户ID
     * @return 登出结果
     */
    @PutMapping("/logoutUser/{userId}")
    public AppServeResponse logoutUser(@PathVariable @NotBlank(message = "用户ID不能为空") String userId) {
        return userService.logoutUser(userId);
    }

    /**
     * 修改用户信息
     * @param updateUserReq 修改用户信息请求
     * @return 修改结果
     */
    @PostMapping("/updateUser")
    public AppServeResponse updateUser(@RequestBody @Validated UpdateUserReq updateUserReq) {
        return userService.updateUser(updateUserReq);
    }

    /**
     * 删除用户
     * @param userId 用户ID
     * @return 删除结果
     */
    @DeleteMapping("/deleteUser/{userId}")
    public AppServeResponse deleteUser(@PathVariable @NotBlank(message = "用户ID不能为空") String userId) {
        return userService.deleteUser(userId);
    }

    /**
     * 创建一个新用户
     * @param createUserReq 创建用户的请求
     * @return 创建结果
     */
    @PostMapping("/createUser")
    public AppServeResponse createUser(@RequestBody @Validated CreateUserReq createUserReq) {
        return userService.createUser(createUserReq);
    }

    /**
     * 获取本账户所拥有的菜单权限 ---- 简单模式
     * @return 查询结果
     */
    @GetMapping("/queryUserMenuPermissionSimpleTree")
    public AppServeDataResponse<List<QueryUserMenuPermissionSimpleTreeResp>> queryUserMenuPermissionSimpleTree() {
        return userService.queryUserMenuPermissionSimpleTree();
    }

    /**
     * 修改自己的用户信息
     * @param updateSelfUserReq 修改用户信息请求
     * @return 修改结果
     */
    @PostMapping("/updateSelfUser")
    public AppServeResponse updateSelfUser(@RequestBody @Validated UpdateSelfUserReq updateSelfUserReq) {
        return userService.updateSelfUser(updateSelfUserReq);
    }


}
