package com.example.demo.controller;

import com.example.demo.model.SystemConfig;
import com.example.demo.service.SystemConfigService;
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;
import java.util.Map;

/**
 * 系统参数配置控制器。
 * 提供系统参数配置的增删改查等 RESTful API 接口。
 */
@RestController
@RequestMapping("/api/config")
@Tag(name = "参数配置", description = "系统参数配置管理接口（IMS-IF-ADMIN）")
public class SystemConfigController {

    private final SystemConfigService systemConfigService;

    public SystemConfigController(SystemConfigService systemConfigService) {
        this.systemConfigService = systemConfigService;
    }

    /**
     * 新增参数配置。
     *
     * @requirement(name="参数配置", id="SRS-IMS_F-005")
     *
     * @param config 参数配置信息
     * @return 创建后的配置
     */
    @PostMapping
    @Operation(summary = "新增参数配置", description = "创建新的系统参数配置项")
    public SystemConfig createConfig(@RequestBody SystemConfig config) {
        return systemConfigService.createConfig(config);
    }

    /**
     * 编辑参数配置。
     *
     * @requirement(name="参数配置", id="SRS-IMS_F-005")
     *
     * @param id     配置ID
     * @param config 更新信息
     * @return 更新后的配置
     */
    @PutMapping("/{id}")
    @Operation(summary = "编辑参数配置", description = "根据ID更新系统参数配置")
    public SystemConfig updateConfig(@PathVariable Long id, @RequestBody SystemConfig config) {
        return systemConfigService.updateConfig(id, config);
    }

    /**
     * 删除参数配置。
     *
     * @requirement(name="参数配置", id="SRS-IMS_F-005")
     *
     * @param id 配置ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除参数配置", description = "根据ID删除系统参数配置")
    public Map<String, Object> deleteConfig(@PathVariable Long id) {
        systemConfigService.deleteConfig(id);
        return Map.of("message", "参数配置删除成功", "id", id);
    }

    /**
     * 查询参数配置列表。
     *
     * @requirement(name="参数配置", id="SRS-IMS_F-005")
     *
     * @return 参数配置列表
     */
    @GetMapping
    @Operation(summary = "查询参数配置列表", description = "获取所有系统参数配置")
    public List<SystemConfig> listConfigs() {
        return systemConfigService.listConfigs();
    }

    /**
     * 根据ID查询参数配置详情。
     *
     * @param id 配置ID
     * @return 配置详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "查询参数配置详情", description = "根据ID获取系统参数配置详细信息")
    public SystemConfig getConfig(@PathVariable Long id) {
        return systemConfigService.getConfig(id);
    }
}
