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

import java.util.List;

/**
 * 参数配置控制器。
 * <p>提供系统参数的新增、编辑、查询接口。</p>
 */
@RestController
@RequestMapping("/api/config")
@Tag(name = "参数配置", description = "参数配置模块接口（需求标识：SRS-F-01-005）")
public class ConfigController {

    private final ConfigService configService;

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

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

    /**
     * 编辑参数。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @PutMapping("/edit")
    @Operation(summary = "编辑参数", description = "修改已有参数")
    public ApiResult<Config> edit(@RequestBody Config config) {
        return ApiResult.success(configService.editConfig(config));
    }

    /**
     * 查询参数列表。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @GetMapping("/list")
    @Operation(summary = "查询参数列表", description = "返回所有系统参数")
    public ApiResult<List<Config>> list() {
        return ApiResult.success(configService.listConfigs());
    }

    /**
     * 查询参数详情。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     */
    @GetMapping("/detail/{id}")
    @Operation(summary = "查询参数详情", description = "根据ID查询参数详情")
    public ApiResult<Config> detail(@PathVariable Long id) {
        return ApiResult.success(configService.getConfigDetail(id));
    }
}
