package com.example.demo.repository;

import com.example.demo.model.Event;
import com.example.demo.model.enums.EventStatus;

import java.util.List;
import java.util.Optional;

/**
 * 事件仓储接口。
 * <p>
 * 定义事件数据的存储操作，当前基于内存实现。
 * 后续可扩展为 PostgreSQL / 达梦DM8 数据库实现。
 * </p>
 */
public interface EventRepository {

    /**
     * 保存事件。
     *
     * @param event 事件对象
     * @return 保存后的事件
     */
    Event save(Event event);

    /**
     * 根据ID查询事件。
     *
     * @param eventId 事件ID
     * @return 事件（Optional）
     */
    Optional<Event> findById(String eventId);

    /**
     * 查询所有事件。
     *
     * @return 事件列表
     */
    List<Event> findAll();

    /**
     * 根据状态查询事件。
     *
     * @param status 事件状态
     * @return 事件列表
     */
    List<Event> findByStatus(EventStatus status);

    /**
     * 更新事件状态。
     *
     * @param eventId 事件ID
     * @param status  新状态
     * @return 更新后的事件
     */
    Optional<Event> updateStatus(String eventId, EventStatus status);

    /**
     * 删除事件。
     *
     * @param eventId 事件ID
     */
    void deleteById(String eventId);

    /**
     * 统计事件总数。
     *
     * @return 总数
     */
    long count();
}
