package com.weather.modules.sys.service;

import com.weather.common.page.PageData;
import com.weather.common.service.BaseService;
import com.weather.modules.sys.dto.SysAlertDTO;
import com.weather.modules.sys.entity.SysAlertEntity;
import com.weather.modules.sys.vo.SysAlertVO;

import java.util.List;
import java.util.Map;

/**
 * 系统通知
 */
public interface SysAlertService extends BaseService<SysAlertEntity> {

    // ===== 前端轮询 =====

    /**
     * 获取所有有效且未过期的通知
     */
    List<SysAlertVO> getActiveAlerts();

    /**
     * 增量获取：只返回 sinceId 之后的通知
     */
    List<SysAlertVO> getActiveAlertsSince(Long sinceId);

    // ===== 发布与撤回 =====

    /**
     * 发布通知（去重：同 sourceType + sourceId 不重复发）
     *
     * @return true=新发布  false=已存在（跳过）
     */
    boolean publishIfNotExists(String level, String title, String content,
                               String sourceType, String sourceId);

    /**
     * 撤回通知（软删除）
     */
    void withdraw(Long id);

    // ===== 管理后台 =====

    PageData<SysAlertVO> pageAlerts(Map<String, Object> params);

    SysAlertVO get(Long id);

    void save(SysAlertDTO dto);

    void update(SysAlertDTO dto);

    void delete(Long[] ids);
}
