package com.red.circle.other.infra.database.mongo.service.message;

import com.red.circle.other.infra.database.mongo.entity.message.PublicMessage;
import java.util.List;
import org.springframework.data.domain.Page;

/**
 * 公共消息服务接口.
 *
 * @author tf
 * @date 2025-10-14
 */
public interface PublicMessageService {

  /**
   * 分页查询公共消息列表.
   *
   * @param type     消息类型（notification/activity，null-查询全部）
   * @param pageNo   页码（从1开始）
   * @param pageSize 每页大小
   * @return 分页结果
   */
  Page<PublicMessage> pagePublicMessages(String type, Integer pageNo, Integer pageSize);

  /**
   * 查询最新的N条消息.
   *
   * @param type  消息类型（notification/activity，null-查询全部）
   * @param limit 查询数量限制
   * @return 消息列表
   */
  List<PublicMessage> listLatestMessages(String type, Integer limit);

  /**
   * 根据消息ID查询.
   *
   * @param messageId 消息ID
   * @return 消息实体
   */
  PublicMessage getByMessageId(String messageId);

  /**
   * 创建公共消息.
   *
   * @param message 消息实体
   * @return 创建后的消息实体
   */
  PublicMessage createPublicMessage(PublicMessage message);

  /**
   * 批量创建公共消息.
   *
   * @param messages 消息列表
   * @return 创建后的消息列表
   */
  List<PublicMessage> batchCreatePublicMessages(List<PublicMessage> messages);

  /**
   * 更新消息状态.
   *
   * @param messageId 消息ID
   * @param status    状态（active/deleted）
   * @return 是否成功
   */
  Boolean updateStatus(String messageId, String status);

  /**
   * 删除消息（逻辑删除）.
   *
   * @param messageId 消息ID
   * @return 是否成功
   */
  Boolean deleteMessage(String messageId);

}