package com.dne.ems.service;

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

import com.dne.ems.dto.OperationLogDTO;
import com.dne.ems.model.UserAccount;
import com.dne.ems.model.enums.OperationType;

/**
 * 操作日志服务接口，提供记录和查询用户操作日志的功能。
 *
 * @version 1.0
 * @since 2025-06-20
 */
public interface OperationLogService {

    /**
     * 记录用户操作
     *
     * @param operationType 操作类型
     * @param description 操作描述
     * @param targetId 操作对象ID（可选）
     * @param targetType 操作对象类型（可选）
     */
    void recordOperation(OperationType operationType, String description, String targetId, String targetType);

    /**
     * 记录特定用户的操作
     *
     * @param user 执行操作的用户
     * @param operationType 操作类型
     * @param description 操作描述
     * @param targetId 操作对象ID（可选）
     * @param targetType 操作对象类型（可选）
     */
    void recordOperation(UserAccount user, OperationType operationType, String description, String targetId, String targetType);

    /**
     * 记录用户登录操作
     *
     * @param userId 用户ID
     * @param ipAddress IP地址
     * @param success 是否成功
     */
    void recordLogin(Long userId, String ipAddress, boolean success);

    /**
     * 记录用户登出操作
     *
     * @param userId 用户ID
     */
    void recordLogout(Long userId);

    /**
     * 获取指定用户的操作日志
     *
     * @param userId 用户ID
     * @return 操作日志DTO列表
     */
    List<OperationLogDTO> getUserOperationLogs(Long userId);

    /**
     * 获取所有操作日志
     *
     * @return 操作日志DTO列表
     */
    List<OperationLogDTO> getAllOperationLogs();

    /**
     * 根据条件查询操作日志
     *
     * @param userId 用户ID（可选）
     * @param operationType 操作类型（可选）
     * @param startTime 开始时间（可选）
     * @param endTime 结束时间（可选）
     * @return 操作日志DTO列表
     */
    List<OperationLogDTO> queryOperationLogs(Long userId, OperationType operationType, 
                                           LocalDateTime startTime, LocalDateTime endTime);
} 