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.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户管理控制器。
 * <p>提供用户的新增、编辑、删除、查询、启用/停用等 RESTful API。</p>
 */
@Tag(name = "用户管理", description = "用户的新增、编辑、删除、查询、启用/停用操作")
@RestController
@RequestMapping("/api/user")
public class UserController {

    private final UserService userService;

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

    /**
     * 新增用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     * @param user 用户信息
     * @return 操作结果
     */
    @Operation(summary = "新增用户")
    @PostMapping("/add")
    public ApiResult<User> add(@RequestBody User user) {
        return ApiResult.success("新增成功", userService.save(user));
    }

    /**
     * 编辑用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     * @param user 用户信息
     * @return 操作结果
     */
    @Operation(summary = "编辑用户")
    @PutMapping("/edit")
    public ApiResult<User> edit(@RequestBody User user) {
        User updated = userService.update(user);
        if (updated == null) {
            return ApiResult.error(404, "用户不存在");
        }
        return ApiResult.success("编辑成功", updated);
    }

    /**
     * 删除用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     * @param id 用户ID
     * @return 操作结果
     */
    @Operation(summary = "删除用户")
    @DeleteMapping("/delete/{id}")
    public ApiResult<Void> delete(@PathVariable Long id) {
        boolean deleted = userService.deleteById(id);
        if (!deleted) {
            return ApiResult.error(404, "用户不存在");
        }
        return ApiResult.success("删除成功", null);
    }

    /**
     * 查询用户列表。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     * @param username 用户名（可选）
     * @param status   状态（可选）
     * @return 用户列表
     */
    @Operation(summary = "查询用户列表")
    @GetMapping("/list")
    public ApiResult<List<User>> list(
            @Parameter(description = "用户名（模糊匹配）") @RequestParam(required = false) String username,
            @Parameter(description = "状态：0-停用，1-启用") @RequestParam(required = false) Integer status) {
        return ApiResult.success(userService.list(username, status));
    }

    /**
     * 启用/停用用户。
     *
     * @requirement(name="用户管理", id="SRS-F-01-001")
     * @param userId 用户ID
     * @param status 状态：0-停用，1-启用
     * @return 操作结果
     */
    @Operation(summary = "启用/停用用户")
    @PutMapping("/status")
    public ApiResult<User> updateStatus(
            @Parameter(description = "用户ID") @RequestParam Long userId,
            @Parameter(description = "状态：0-停用，1-启用") @RequestParam Integer status) {
        User user = userService.updateStatus(userId, status);
        if (user == null) {
            return ApiResult.error(404, "用户不存在");
        }
        return ApiResult.success(status == 1 ? "启用成功" : "停用成功", user);
    }
}
