package com.example.demo.controller;

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 jakarta.annotation.PostConstruct;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 用户管理控制器。
 * 提供用户增删改查等 RESTful API 接口。
 */
@RestController
@RequestMapping("/api/user")
@Tag(name = "用户管理", description = "用户增删改查接口（IMS-IF-USER）")
public class UserController {

    private final UserService userService;

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

    /**
     * 新增用户。
     *
     * @requirement(name="用户管理", id="SRS-IMS_F-001")
     *
     * @param user 用户信息
     * @return 创建后的用户
     */
    @PostMapping
    @Operation(summary = "新增用户", description = "创建新用户，密码使用BCrypt加密存储")
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    /**
     * 编辑用户。
     *
     * @requirement(name="用户管理", id="SRS-IMS_F-001")
     *
     * @param id   用户ID
     * @param user 更新信息
     * @return 更新后的用户
     */
    @PutMapping("/{id}")
    @Operation(summary = "编辑用户", description = "根据ID更新用户信息")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }

    /**
     * 删除用户。
     *
     * @requirement(name="用户管理", id="SRS-IMS_F-001")
     *
     * @param id 用户ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除用户", description = "根据ID删除用户")
    public Map<String, Object> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return Map.of("message", "用户删除成功", "userId", id);
    }

    /**
     * 查询用户列表。
     *
     * @requirement(name="用户管理", id="SRS-IMS_F-001")
     *
     * @param keyword 搜索关键字（可选）
     * @param page    页码，默认0
     * @param size    每页条数，默认10
     * @return 用户列表
     */
    @GetMapping
    @Operation(summary = "查询用户列表", description = "支持关键字模糊搜索和分页")
    public List<User> listUsers(
            @Parameter(description = "搜索关键字") @RequestParam(required = false) String keyword,
            @Parameter(description = "页码") @RequestParam(defaultValue = "0") int page,
            @Parameter(description = "每页条数") @RequestParam(defaultValue = "10") int size) {
        return userService.listUsers(keyword, page, size);
    }

    /**
     * 根据ID查询用户详情。
     *
     * @requirement(name="用户管理", id="SRS-IMS_F-001")
     *
     * @param id 用户ID
     * @return 用户详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "查询用户详情", description = "根据ID获取用户详细信息")
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }

    @PostConstruct
    public void init() {
        userService.initDefaultUsers();
    }
}
