/**
 * @ProjectName: 智慧评标-主观分助手
 * @Package: com.zhpb.gdyd_zhpb_zgf.repository.mysql
 * @ClassName: SysLogRepository
 * @Description: 系统日志Repository接口，提供系统日志数据访问方法
 * @Author: 张志锋
 * @Date: 2025-10-31
 * @Version: 1.0
 * @Copyright: © 2025 智慧评标-主观分助手
 */
package com.zhpb.gdyd_zhpb_zgf.repository.mysql;

import com.zhpb.gdyd_zhpb_zgf.entity.mysql.SysLog;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

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

/**
 * 系统日志Repository接口
 */
@Repository
public interface SysLogRepository extends JpaRepository<SysLog, Long>, JpaSpecificationExecutor<SysLog> {

    /**
     * 根据日志级别查询
     *
     * @param logLevel 日志级别
     * @return 日志列表
     */
    List<SysLog> findByLogLevel(String logLevel);

    /**
     * 根据时间范围查询
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 日志列表
     */
    List<SysLog> findByCreateTimeBetween(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据日志级别和时间范围查询（分页）
     *
     * @param logLevel 日志级别
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param pageable 分页参数
     * @return 分页日志列表
     */
    Page<SysLog> findByLogLevelAndCreateTimeBetween(
            String logLevel, LocalDateTime startTime, LocalDateTime endTime, Pageable pageable);

    /**
     * 根据日志来源查询
     *
     * @param loggerName 日志来源
     * @param pageable 分页参数
     * @return 分页日志列表
     */
    Page<SysLog> findByLoggerName(String loggerName, Pageable pageable);

    /**
     * 根据关键字搜索日志内容
     *
     * @param keyword 关键字
     * @param pageable 分页参数
     * @return 分页日志列表
     */
    @Query("SELECT s FROM SysLog s WHERE s.logContent LIKE %:keyword% OR s.fullMessage LIKE %:keyword%")
    Page<SysLog> searchByKeyword(@Param("keyword") String keyword, Pageable pageable);

    /**
     * 获取最新一条日志
     */
    SysLog findTopByOrderByCreateTimeDesc();
}

