package com.njcn.rdms.module.system.service.user;

import jakarta.validation.Valid;

import java.util.Map;

/**
 * 用户偏好配置 Service 接口
 */
public interface UserPreferenceService {

    /**
     * 获得当前用户主题配置覆盖项
     *
     * 约束：
     * 1. 只处理当前登录用户自己的配置；
     * 2. 若数据库中没有记录，返回空对象 {}，而不是 null。
     *
     * @param userId 用户 ID
     * @return 主题配置覆盖项；未保存时返回空对象
     */
    Map<String, Object> getThemeSettings(Long userId);

    /**
     * 保存当前用户主题配置覆盖项
     *
     * 约束：
     * 1. 保存的是用户主题覆盖项，不是完整默认主题；
     * 2. 前端不允许传 userId 决定归属，归属由调用方基于登录态传入；
     * 3. 传入空对象时，等价于清空个性化覆盖项。
     *
     * @param userId         用户 ID
     * @param themeSettings 主题配置覆盖项
     */
    void saveThemeSettings(Long userId, @Valid Map<String, Object> themeSettings);

    /**
     * 重置当前用户主题配置覆盖项
     *
     * 约束：
     * 1. 重置后接口再次读取应返回空对象 {}；
     * 2. 具体实现不要求物理删除记录，但外部语义必须等价于“没有个性化配置”。
     *
     * @param userId 用户 ID
     */
    void resetThemeSettings(Long userId);

}
