package com.example.demo.repository;

import com.example.demo.model.TaskStatus;
import org.springframework.data.jpa.repository.JpaRepository;
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;
import java.util.Optional;

@Repository
public interface TaskStatusRepository extends JpaRepository<TaskStatus, Long> {
    
    /**
     * 根据任务ID查找状态
     */
    Optional<TaskStatus> findByTaskId(String taskId);
    
    /**
     * 根据用户名查找所有任务状态
     */
    List<TaskStatus> findByUsernameOrderByCreatedAtDesc(String username);
    
    /**
     * 根据用户名和状态查找任务
     */
    List<TaskStatus> findByUsernameAndStatus(String username, TaskStatus.Status status);
    
    /**
     * 查找需要轮询的任务（处理中且未超时）
     */
    @Query("SELECT t FROM TaskStatus t WHERE t.status = 'PROCESSING' AND t.pollCount < t.maxPolls AND (t.lastPolledAt IS NULL OR t.lastPolledAt < :cutoffTime)")
    List<TaskStatus> findTasksNeedingPolling(@Param("cutoffTime") LocalDateTime cutoffTime);
    
    /**
     * 查找超时的任务
     */
    @Query("SELECT t FROM TaskStatus t WHERE t.status = 'PROCESSING' AND t.pollCount >= t.maxPolls")
    List<TaskStatus> findTimeoutTasks();
    
    /**
     * 根据外部任务ID查找状态
     */
    Optional<TaskStatus> findByExternalTaskId(String externalTaskId);
    
    /**
     * 统计用户的任务数量
     */
    long countByUsername(String username);
    
    /**
     * 统计用户指定状态的任务数量
     */
    long countByUsernameAndStatus(String username, TaskStatus.Status status);
    
    /**
     * 查找最近创建的任务
     */
    @Query("SELECT t FROM TaskStatus t WHERE t.username = :username ORDER BY t.createdAt DESC")
    List<TaskStatus> findRecentTasksByUsername(@Param("username") String username, org.springframework.data.domain.Pageable pageable);
}








