package com.example.demo.service;

import com.example.demo.model.Config;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

/**
 * 参数配置服务。
 * <p>支持系统参数的配置，包括参数的新增、编辑、查询。</p>
 */
@Service
public class ConfigService {

    private final Map<Long, Config> configMap = new ConcurrentHashMap<>();
    private final AtomicLong idCounter = new AtomicLong(1);

    public ConfigService() {
        long c1 = idCounter.getAndIncrement();
        configMap.put(c1, new Config(c1, "系统名称", "sys.name", "综合管理信息系统", "系统全局名称", 1));
        long c2 = idCounter.getAndIncrement();
        configMap.put(c2, new Config(c2, "默认密码", "sys.default.password", "123456", "新用户默认密码", 1));
        long c3 = idCounter.getAndIncrement();
        configMap.put(c3, new Config(c3, "上传文件大小限制", "sys.upload.maxSize", "10MB", "单位：MB", 1));
    }

    /**
     * 新增参数。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     * 创建新的系统参数配置。
     */
    public Config addConfig(Config config) {
        long id = idCounter.getAndIncrement();
        config.setId(id);
        if (config.getStatus() == null) config.setStatus(1);
        configMap.put(id, config);
        return config;
    }

    /**
     * 编辑参数。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     * 修改已有参数的信息。
     */
    public Config editConfig(Config config) {
        Config existing = configMap.get(config.getId());
        if (existing == null) throw new RuntimeException("参数不存在");
        if (config.getConfigName() != null) existing.setConfigName(config.getConfigName());
        if (config.getConfigKey() != null) existing.setConfigKey(config.getConfigKey());
        if (config.getConfigValue() != null) existing.setConfigValue(config.getConfigValue());
        if (config.getRemark() != null) existing.setRemark(config.getRemark());
        if (config.getStatus() != null) existing.setStatus(config.getStatus());
        return existing;
    }

    /**
     * 查询参数列表。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     * 返回所有系统参数。
     */
    public List<Config> listConfigs() {
        return new ArrayList<>(configMap.values());
    }

    /**
     * 查询参数详情。
     *
     * @requirement(name="参数配置", id="SRS-F-01-005")
     * 根据ID查询参数详情。
     */
    public Config getConfigDetail(Long id) {
        Config config = configMap.get(id);
        if (config == null) throw new RuntimeException("参数不存在");
        return config;
    }
}
