package io.delphiplatform.api.v3.rdb.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import io.delphiplatform.api.v3.rdb.entity.RelatedIsrcProjection;
import io.delphiplatform.api.v3.rdb.entity.TrackEntity;

public interface TrackRepository extends JpaRepository<TrackEntity, String>, JpaSpecificationExecutor<TrackEntity> {

    @Query(nativeQuery = true,
        value = ""
            + "select distinct related_track.isrc"
            + "    from track input_isrc_track"
            + "        inner join track related_track on related_track.prod_fam_no = input_isrc_track.prod_fam_no"
            + "    where input_isrc_track.config_cat_key = 'D'"
            + "        and input_isrc_track.isrc in (:isrcs)")
    Set<String> findRelatedIsrcs(@Param("isrcs") Collection<String> isrcs);

    @Query(name = "TrackEntity.findIsrcsWithRelated")
    List<RelatedIsrcProjection> findIsrcsWithRelated(@Param("isrcs") Collection<String> isrcs);

}
