package com.sn.sowsysrestapi.domain.repository;

import com.sn.sowsysrestapi.domain.entity.ReportDirectory;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

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

@Repository
public interface ReportDirectoryRepo extends CustomJpaRepository<ReportDirectory, Long> {


    @Query("from ReportDirectory where ownerId = :ownerId")
    ReportDirectory findByOwnerId(Long ownerId);

    Optional<ReportDirectory> findByOwnerCode(String userCode);

    Optional<List<ReportDirectory>> findPageableByOwnerCode(String userCode, Pageable page);

    ReportDirectory deleteByOwnerCode(String userCode);

    List<ReportDirectory> findBySupervisorCode(String supervisorCode);

    @Query(value = "SELECT * FROM report_directory_supervisor_id a INNER JOIN report_directory b" +
            " ON a.report_directory_id = b.id WHERE a.supervisor_id = :supervisorId", nativeQuery = true)
    List<ReportDirectory> findBySupervisorId(Long supervisorId);

    @Query(value = "SELECT * FROM report_directory_supervisor_id a INNER JOIN report_directory b" +
            " ON a.report_directory_id = b.id WHERE a.supervisor_id = :supervisorId AND b.owner_id = :ownerId",
            nativeQuery = true)
    List<ReportDirectory> findBySupervisorIdAndOwnerId(Long supervisorId, Long ownerId);

    List<ReportDirectory> findByOwnerCodeAndSupervisorCode(String ownerCode, String supervisorCode);


}
