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

import com.unicorn.hgzero.stt.repository.entity.SpeakerEntity;
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 SpeakerRepository extends JpaRepository<SpeakerEntity, String> {
    
    /**
     * 사용자 ID로 화자 조회
     */
    Optional<SpeakerEntity> findByUserId(String userId);
    
    /**
     * Azure Profile ID로 화자 조회
     */
    Optional<SpeakerEntity> findByProfileId(String profileId);
    
    /**
     * 화자명으로 검색
     */
    List<SpeakerEntity> findBySpeakerNameContaining(String speakerName);
    
    /**
     * 발언 비중이 높은 화자 조회
     */
    @Query("SELECT s FROM SpeakerEntity s WHERE s.totalDuration > :minDuration ORDER BY s.totalDuration DESC")
    List<SpeakerEntity> findActiveSpeakers(@Param("minDuration") Integer minDuration);
    
    /**
     * 신뢰도가 낮은 화자 조회
     */
    @Query("SELECT s FROM SpeakerEntity s WHERE s.averageConfidence < :threshold ORDER BY s.averageConfidence ASC")
    List<SpeakerEntity> findLowConfidenceSpeakers(@Param("threshold") Double threshold);
    
    /**
     * 사용자 ID 미지정 화자 조회
     */
    @Query("SELECT s FROM SpeakerEntity s WHERE s.userId IS NULL ORDER BY s.totalDuration DESC")
    List<SpeakerEntity> findUnassignedSpeakers();
}