package com.example.demo.controller;

import com.example.demo.model.ApiResult;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户管理控制器。
 * <p>提供用户新增、编辑、删除、查询、启用/停用、密码重置等RESTful接口。</p>
 */
@RestController
@RequestMapping("/api/user")
@Tag(name = "用户管理", description = "用户管理模块接口（需求标识：SRS-F-01-001）")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    /**
     * 新增用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     */
    @PostMapping("/add")
    @Operation(summary = "新增用户", description = "创建新的系统用户")
    public ApiResult<User> add(@RequestBody User user) {
        return ApiResult.success(userService.addUser(user));
    }

    /**
     * 编辑用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     */
    @PutMapping("/edit")
    @Operation(summary = "编辑用户", description = "修改已有用户信息")
    public ApiResult<User> edit(@RequestBody User user) {
        return ApiResult.success(userService.editUser(user));
    }

    /**
     * 删除用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     */
    @DeleteMapping("/delete/{id}")
    @Operation(summary = "删除用户", description = "根据ID删除指定用户")
    public ApiResult<Void> delete(@PathVariable Long id) {
        userService.deleteUser(id);
        return ApiResult.success();
    }

    /**
     * 查询用户列表。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     */
    @GetMapping("/list")
    @Operation(summary = "查询用户列表", description = "支持关键字模糊搜索和分页查询")
    public ApiResult<List<User>> list(@RequestParam(required = false) String keyword,
                                       @RequestParam(defaultValue = "1") int page,
                                       @RequestParam(defaultValue = "10") int size) {
        return ApiResult.success(userService.listUsers(keyword, page, size));
    }

    /**
     * 启用/停用用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     */
    @PutMapping("/status")
    @Operation(summary = "启用/停用用户", description = "修改用户状态（启用或停用）")
    public ApiResult<User> toggleStatus(@RequestParam Long id, @RequestParam Integer status) {
        return ApiResult.success(userService.toggleUserStatus(id, status));
    }

    /**
     * 重置密码。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     */
    @PutMapping("/reset-password")
    @Operation(summary = "重置密码", description = "重置用户密码为默认密码或指定新密码")
    public ApiResult<User> resetPassword(@RequestParam Long id,
                                          @RequestParam(required = false) String newPassword) {
        return ApiResult.success(userService.resetPassword(id, newPassword));
    }
}
