package com.eksad.masterdata.repository;

import com.eksad.ddms.common.util.status.DataStatus;
import com.eksad.masterdata.domain.Payload;
import jakarta.transaction.Transactional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
@Transactional
public interface PayloadRepository extends GenericRepository<Payload> {
    Payload findOneBySourceId(String sourceID);

    List<Payload> findAllBySourceId(String sourceID);

    Payload findOneBySourceIdAndPayloadStatus(String sourceID, DataStatus payloadStatus);

    List<Payload> findAllByType(String type);

    List<Payload> findAllByTypeAndPayloadStatus(String type, DataStatus payloadStatus);

    List<Payload> findAll();

    Page<Payload> findAll(Pageable pageable);

    @Query(nativeQuery = true, value = "select * from trx_payload where event = :eventName "
            + "and eventdate = :evenDate "
            + "and (respayload ilike '%\"status\":0%' "
            + "or respayload is null);")
    List<Payload> findAllByEventDateAndEventAndResPayloadContainsFailed(@Param("evenDate") Date evenDate,
                                                                        @Param("eventName") String eventName);
}