package com.unicorn.hgzero.stt.repository.jpa;

import com.unicorn.hgzero.stt.domain.Recording;
import com.unicorn.hgzero.stt.repository.entity.RecordingEntity;
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.util.List;
import java.util.Optional;

/**
 * 녹음 JPA Repository
 * 녹음 정보에 대한 데이터베이스 접근을 담당
 */
@Repository
public interface RecordingRepository extends JpaRepository<RecordingEntity, String> {
    
    /**
     * 회의 ID로 녹음 조회
     */
    List<RecordingEntity> findByMeetingId(String meetingId);
    
    /**
     * 세션 ID로 녹음 조회
     */
    Optional<RecordingEntity> findBySessionId(String sessionId);
    
    /**
     * 상태별 녹음 조회
     */
    List<RecordingEntity> findByStatus(Recording.RecordingStatus status);
    
    /**
     * 진행 중인 녹음 존재 여부 확인
     */
    @Query("SELECT COUNT(r) > 0 FROM RecordingEntity r WHERE r.meetingId = :meetingId AND r.status IN ('READY', 'RECORDING')")
    boolean existsActiveRecordingByMeetingId(@Param("meetingId") String meetingId);
    
    /**
     * 회의별 총 녹음 시간 조회
     */
    @Query("SELECT COALESCE(SUM(r.duration), 0) FROM RecordingEntity r WHERE r.meetingId = :meetingId AND r.status = 'COMPLETED'")
    Integer getTotalDurationByMeetingId(@Param("meetingId") String meetingId);
    
    /**
     * 상태별 녹음 수 카운트
     */
    @Query("SELECT COUNT(r) FROM RecordingEntity r WHERE r.status = :status")
    Long countByStatus(@Param("status") Recording.RecordingStatus status);
}