package com.dne.ems.repository;

import java.time.LocalDateTime;
import java.util.List;

import com.dne.ems.model.OperationLog;
import com.dne.ems.model.enums.OperationType;

/**
 * 操作日志仓库接口，提供操作日志的CRUD操作。
 *
 * @version 1.0
 * @since 2025-06-20
 */
public interface OperationLogRepository {

    /**
     * 保存操作日志
     *
     * @param operationLog 操作日志实体
     * @return 保存后的操作日志实体
     */
    OperationLog save(OperationLog operationLog);

    /**
     * 根据ID查找操作日志
     *
     * @param id 操作日志ID
     * @return 操作日志实体，如果不存在则返回null
     */
    OperationLog findById(Long id);

    /**
     * 查找所有操作日志
     *
     * @return 操作日志列表
     */
    List<OperationLog> findAll();

    /**
     * 根据用户ID查找操作日志
     *
     * @param userId 用户ID
     * @return 该用户的操作日志列表
     */
    List<OperationLog> findByUserId(Long userId);

    /**
     * 根据操作类型查找操作日志
     *
     * @param operationType 操作类型
     * @return 该类型的操作日志列表
     */
    List<OperationLog> findByOperationType(OperationType operationType);

    /**
     * 根据时间范围查找操作日志
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 该时间范围内的操作日志列表
     */
    List<OperationLog> findByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据条件查询操作日志
     *
     * @param userId 用户ID，可为null
     * @param operationType 操作类型，可为null
     * @param startTime 开始时间，可为null
     * @param endTime 结束时间，可为null
     * @return 符合条件的操作日志列表
     */
    List<OperationLog> findByConditions(Long userId, OperationType operationType, 
                                        LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 删除操作日志
     *
     * @param id 操作日志ID
     */
    void deleteById(Long id);

    /**
     * 删除所有操作日志
     */
    void deleteAll();
} 