package com.yushu.system.mapper;

import java.util.List;
import java.util.Map;
import com.yushu.system.domain.SysNotification;
import org.apache.ibatis.annotations.Param;

/**
 * 系统通知Mapper接口
 * 
 * @author yushu
 * @date 2025-11-12
 */
public interface SysNotificationMapper 
{
    /**
     * 查询系统通知
     * 
     * @param notificationId 系统通知主键
     * @return 系统通知
     */
    public SysNotification selectSysNotificationByNotificationId(Long notificationId);

    /**
     * 查询系统通知列表
     * 
     * @param sysNotification 系统通知
     * @return 系统通知集合
     */
    public List<SysNotification> selectSysNotificationList(SysNotification sysNotification);

    /**
     * 查询用户的通知列表
     * 
     * @param userId 用户ID
     * @return 通知列表
     */
    public List<Map<String, Object>> selectUserNotificationList(@Param("userId") Long userId);

    /**
     * 统计用户未读通知数
     * 
     * @param userId 用户ID
     * @return 未读通知数
     */
    public int countUnreadNotifications(@Param("userId") Long userId);

    /**
     * 新增系统通知
     * 
     * @param sysNotification 系统通知
     * @return 结果
     */
    public int insertSysNotification(SysNotification sysNotification);

    /**
     * 修改系统通知
     * 
     * @param sysNotification 系统通知
     * @return 结果
     */
    public int updateSysNotification(SysNotification sysNotification);

    /**
     * 删除系统通知
     * 
     * @param notificationId 系统通知主键
     * @return 结果
     */
    public int deleteSysNotificationByNotificationId(Long notificationId);

    /**
     * 批量删除系统通知
     * 
     * @param notificationIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysNotificationByNotificationIds(Long[] notificationIds);

    /**
     * 发布通知（创建接收记录）
     * 
     * @param notificationId 通知ID
     * @param userIds 用户ID列表
     * @return 结果
     */
    public int publishNotificationToUsers(@Param("notificationId") Long notificationId, @Param("userIds") List<Long> userIds);

    /**
     * 标记通知为已读
     * 
     * @param notificationId 通知ID
     * @param userId 用户ID
     * @return 结果
     */
    public int markNotificationAsRead(@Param("notificationId") Long notificationId, @Param("userId") Long userId);

    /**
     * 删除用户通知
     * 
     * @param notificationId 通知ID
     * @param userId 用户ID
     * @return 结果
     */
    public int deleteUserNotification(@Param("notificationId") Long notificationId, @Param("userId") Long userId);

    /**
     * 查询所有有效的系统通知（简化版）
     * 
     * @param userId 用户ID
     * @return 通知列表
     */
    public List<Map<String, Object>> selectAllNotifications(@Param("userId") Long userId);
}
