package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.LifeUserPersonalizationSetting;

public interface LifeUserPersonalizationSettingService extends IService<LifeUserPersonalizationSetting> {

    R<String> add(LifeUserPersonalizationSetting setting);

    R<String> deleteById(Integer id);

    R<String> update(LifeUserPersonalizationSetting setting);

    R<LifeUserPersonalizationSetting> getInfoById(Integer id);

    R<LifeUserPersonalizationSetting> getByUserId(Integer userId);

    /**
     * 查询用户个性化设置：优先 Redis；未命中则与 {@link #getByUserId} 一致查库（含无记录时初始化）并写入 Redis。
     *
     * @param userId life_user.id
     * @return 实体；userId 为空或查库/初始化失败时返回 null
     */
    LifeUserPersonalizationSetting getByUserIdCacheAside(Integer userId);

    /**
     * 是否不应向该用户发送与「收到点赞」相关的通知：notifyReceiveMessage=0，或 notifyReceiveMessage=1 且 notifyLike=0。
     * 调用方应传入接收通知的一方对应的 life_user.id（例如动态点赞场景为动态发布者，而非点赞操作人）。
     *
     * @param userId life_user.id（接收方）
     * @return userId 为空时 false（不拦截）；有设置且满足上述条件时 true
     */
    boolean shouldSuppressLikeRelatedNotice(Integer userId);

    /**
     * 是否不应发送与关注相关的通知：notifyReceiveMessage=0，或 notifyReceiveMessage=1 且 notifyFollow=0。
     *
     * @param userId life_user.id（被关注方）
     * @return userId 为空时 false（不拦截）；有设置且满足上述条件时 true
     */
    boolean shouldSuppressFollowRelatedNotice(Integer userId);

    R<IPage<LifeUserPersonalizationSetting>> list(Integer pageNum, Integer pageSize, Integer userId);
}
