package org.xyzh.system.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.xyzh.api.system.config.SysConfigService;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.system.TbSysConfig;

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

/**
 * @description 系统配置管理控制器
 * @filename ConfigController.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-11-18
 */
@RestController
@RequestMapping("/system/config")
public class ConfigController {

    @Autowired
    private SysConfigService sysConfigService;
    
    /**
     * @description 获取所有配置项（前端配置视图使用）
     * @return ResultDomain<TbSysConfig> 配置项列表
     */
    @GetMapping("/list")
    public ResultDomain<TbSysConfig> getAllConfigs() {
        return sysConfigService.getAllConfigs();
    }

    /**
     * @description 根据分组获取配置项
     * @param groupKey 分组键
     * @return ResultDomain<TbSysConfig> 配置项列表
     */
    @GetMapping("/group/{groupKey}")
    public ResultDomain<TbSysConfig> getConfigsByGroup(@PathVariable String groupKey) {
        return sysConfigService.getConfigsByGroup(groupKey);
    }


    /**
     * @description 保存配置项（批量保存）
     * @param configs 配置项列表
     * @return ResultDomain<Boolean> 保存结果
     */
    @PostMapping("/save")
    public ResultDomain<Boolean> saveConfigs(@RequestBody List<Map<String, String>> configs) {
        return sysConfigService.batchSaveConfigs(configs);
    }

    /**
     * @description 创建单个配置项
     * @param config 配置项
     * @return ResultDomain<Boolean> 创建结果
     */
    @PostMapping("/create")
    public ResultDomain<Boolean> createConfig(@RequestBody TbSysConfig config) {
        return sysConfigService.createConfig(config);
    }

    /**
     * @description 更新单个配置项
     * @param config 配置项
     * @return ResultDomain<Boolean> 更新结果
     */
    @PutMapping("/update")
    public ResultDomain<Boolean> updateConfig(@RequestBody TbSysConfig config) {
        return sysConfigService.updateConfig(config);
    }

    /**
     * @description 删除配置项
     * @param id 配置ID
     * @return ResultDomain<Boolean> 删除结果
     */
    @DeleteMapping("/{id}")
    public ResultDomain<Boolean> deleteConfig(@PathVariable String id) {
        return sysConfigService.deleteConfig(id);
    }

    /**
     * @description 分页查询配置项
     * @param pageRequest 分页请求
     * @return ResultDomain<TbSysConfig> 配置项分页列表
     */
    @PostMapping("/page")
    public ResultDomain<TbSysConfig> getConfigPage(@RequestBody PageRequest<TbSysConfig> pageRequest) {
        return sysConfigService.getConfigPage(pageRequest.getFilter(), pageRequest.getPageParam());
    }

    /**
     * @description 根据ID获取配置项详情
     * @param id 配置ID
     * @return ResultDomain<TbSysConfig> 配置项详情
     */
    @GetMapping("/{id}")
    public ResultDomain<TbSysConfig> getConfigById(@PathVariable String id) {
        return sysConfigService.getConfigById(id);
    }
}
