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

import com.unicorn.hgzero.stt.repository.entity.TranscriptionEntity;
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 TranscriptionRepository extends JpaRepository<TranscriptionEntity, String> {
    
    /**
     * 녹음 ID로 변환 결과 조회
     */
    Optional<TranscriptionEntity> findByRecordingId(String recordingId);
    
    /**
     * 완료된 변환 결과 조회
     */
    @Query("SELECT t FROM TranscriptionEntity t WHERE t.completedAt IS NOT NULL ORDER BY t.completedAt DESC")
    List<TranscriptionEntity> findCompletedTranscriptions();
    
    /**
     * 평균 신뢰도가 낮은 변환 결과 조회
     */
    @Query("SELECT t FROM TranscriptionEntity t WHERE t.averageConfidence < :threshold ORDER BY t.averageConfidence ASC")
    List<TranscriptionEntity> findLowConfidenceTranscriptions(@Param("threshold") Double threshold);
    
    /**
     * 녹음 ID 목록으로 변환 결과 조회
     */
    @Query("SELECT t FROM TranscriptionEntity t WHERE t.recordingId IN :recordingIds")
    List<TranscriptionEntity> findByRecordingIds(@Param("recordingIds") List<String> recordingIds);
    
    /**
     * 전체 변환 결과 통계
     */
    @Query("SELECT COUNT(t), AVG(t.averageConfidence), SUM(t.totalDuration) FROM TranscriptionEntity t WHERE t.completedAt IS NOT NULL")
    Object[] getTranscriptionStatistics();
}