package shop.alien.lawyer.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.LifeNotice;
import shop.alien.entity.store.vo.LifeNoticeVo;

/**
 * 律师通知服务接口
 *
 * @author system
 */
public interface LawyerNoticeService extends IService<LifeNotice> {

    /**
     * 获取律师通知列表
     *
     * @param pageNum    页码，从1开始
     * @param pageSize   每页大小
     * @param receiverId 接收人ID
     * @param noticeType 通知类型：0-系统通知和订单提醒之外的类型，1-系统通知，2-订单提醒
     * @return 分页通知列表
     */
    R<IPage<LifeNoticeVo>> getLawyerNoticeList(Integer pageNum, Integer pageSize, String receiverId, Integer noticeType);

    /**
     * 查询接收人是否有未读通知
     *
     * @param receiverId 接收人ID，不能为空
     * @return 是否有未读通知，true-有未读，false-无未读
     */
    R<Boolean> hasUnreadNotice(String receiverId);

    /**
     * 根据通知ID标记通知为已读
     * <p>
     * 将指定ID的通知标记为已读状态（isRead = 1）
     * </p>
     *
     * @param id 通知ID，必须大于0且不能为null
     * @return 受影响的记录数，>0表示更新成功，0表示未找到匹配的记录或更新失败
     * @throws IllegalArgumentException 当通知ID无效时抛出
     * @throws RuntimeException        当更新操作异常时抛出
     * @author system
     * @since 2025-01-XX
     */
    int readNoticeById(Integer id);

}
