package research.loghunter.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import research.loghunter.entity.ScannedFile;

import java.util.List;
import java.util.Optional;

public interface ScannedFileRepository extends JpaRepository<ScannedFile, Long> {
    
    // 파일 경로와 크기로 이미 스캔된 파일인지 확인
    Optional<ScannedFile> findByServerIdAndFilePathAndFileSize(Long serverId, String filePath, Long fileSize);
    
    // 서버별 스캔된 파일 목록
    List<ScannedFile> findByServerId(Long serverId);
    
    // 경로별 스캔된 파일 목록
    List<ScannedFile> findByLogPathId(Long logPathId);
    
    // 서버와 파일경로로 스캔 이력 조회 (크기 무관 - 변경 체크용)
    @Query("SELECT sf FROM ScannedFile sf WHERE sf.serverId = :serverId AND sf.filePath = :filePath ORDER BY sf.scannedAt DESC")
    List<ScannedFile> findByServerIdAndFilePath(@Param("serverId") Long serverId, @Param("filePath") String filePath);
    
    // 서버별 스캔 파일 수
    long countByServerId(Long serverId);
    
    // 경로별 스캔 파일 수
    long countByLogPathId(Long logPathId);

    // 서버+파일경로 기준 삭제
    @Modifying
    @Query("DELETE FROM ScannedFile sf WHERE sf.serverId = :serverId AND sf.filePath = :filePath")
    int deleteByServerIdAndFilePath(@Param("serverId") Long serverId, @Param("filePath") String filePath);

    // 서버별 전체 삭제
    @Modifying
    @Query("DELETE FROM ScannedFile sf WHERE sf.serverId = :serverId")
    int deleteByServerId(@Param("serverId") Long serverId);
}
