package com.example.demo.controller;

import com.example.demo.model.ApiResult;
import com.example.demo.model.Config;
import com.example.demo.service.ConfigService;
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/config")
public class ConfigController {

    private final ConfigService configService;

    public ConfigController(ConfigService configService) {
        this.configService = configService;
    }

    /**
     * 新增参数配置。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @Operation(summary = "新增参数")
    @PostMapping("/add")
    public ApiResult<Config> add(@RequestBody Config config) {
        return ApiResult.success("新增成功", configService.save(config));
    }

    /**
     * 编辑参数配置。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @Operation(summary = "编辑参数")
    @PutMapping("/edit")
    public ApiResult<Config> edit(@RequestBody Config config) {
        Config updated = configService.update(config);
        if (updated == null) {
            return ApiResult.error(404, "参数不存在");
        }
        return ApiResult.success("编辑成功", updated);
    }

    /**
     * 查询参数列表。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @Operation(summary = "查询参数列表")
    @GetMapping("/list")
    public ApiResult<List<Config>> list(
            @Parameter(description = "参数名称（模糊匹配）") @RequestParam(required = false) String configName) {
        return ApiResult.success(configService.list(configName));
    }

    /**
     * 查询参数详情。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @Operation(summary = "查询参数详情")
    @GetMapping("/detail/{id}")
    public ApiResult<Config> detail(@PathVariable Long id) {
        Config config = configService.findById(id);
        if (config == null) {
            return ApiResult.error(404, "参数不存在");
        }
        return ApiResult.success(config);
    }
}
