package com.kt.event.analytics.repository;

import com.kt.event.analytics.entity.TimelineData;
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;

/**
 * 시간대별 데이터 Repository
 */
@Repository
public interface TimelineDataRepository extends JpaRepository<TimelineData, Long> {

    /**
     * 이벤트 ID로 시간대별 데이터 조회 (시간 순 정렬)
     *
     * @param eventId 이벤트 ID
     * @return 시간대별 데이터 목록
     */
    List<TimelineData> findByEventIdOrderByTimestampAsc(String eventId);

    /**
     * 이벤트 ID와 기간으로 시간대별 데이터 조회
     *
     * @param eventId   이벤트 ID
     * @param startDate 시작 날짜
     * @param endDate   종료 날짜
     * @return 시간대별 데이터 목록
     */
    @Query("SELECT t FROM TimelineData t WHERE t.eventId = :eventId AND t.timestamp BETWEEN :startDate AND :endDate ORDER BY t.timestamp ASC")
    List<TimelineData> findByEventIdAndTimestampBetween(
        @Param("eventId") String eventId,
        @Param("startDate") LocalDateTime startDate,
        @Param("endDate") LocalDateTime endDate
    );

    /**
     * 여러 이벤트 ID로 시간대별 데이터 조회 (시간 순 정렬)
     *
     * @param eventIds 이벤트 ID 목록
     * @return 시간대별 데이터 목록
     */
    List<TimelineData> findByEventIdInOrderByTimestampAsc(List<String> eventIds);

    /**
     * 여러 이벤트 ID와 기간으로 시간대별 데이터 조회
     *
     * @param eventIds  이벤트 ID 목록
     * @param startDate 시작 날짜
     * @param endDate   종료 날짜
     * @return 시간대별 데이터 목록
     */
    @Query("SELECT t FROM TimelineData t WHERE t.eventId IN :eventIds AND t.timestamp BETWEEN :startDate AND :endDate ORDER BY t.timestamp ASC")
    List<TimelineData> findByEventIdInAndTimestampBetween(
        @Param("eventIds") List<String> eventIds,
        @Param("startDate") LocalDateTime startDate,
        @Param("endDate") LocalDateTime endDate
    );
}
