package com.eksad.masterdata.repository;

import com.eksad.masterdata.common.listEnum.ReceiptStatus;
import com.eksad.masterdata.common.listEnum.ReceiptType;
import com.eksad.masterdata.domain.ReceiptSOBankEntryProjection;
import com.eksad.masterdata.domain.ReceiptSOTunaiEntryProjection;
import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Transactional
public interface ReceiptSOTunaiRepository extends ReceiptGenericRepository<ReceiptSOTunaiEntryProjection> {

    ReceiptSOTunaiEntryProjection findOneById(Long receiptID);

    ReceiptSOTunaiEntryProjection findOneByRecordID(String recordID);

    List<ReceiptSOTunaiEntryProjection> findAllByOrderById();

    List<ReceiptSOTunaiEntryProjection> findAllByReceiptStatus(ReceiptStatus receiptStatus);

    ReceiptSOTunaiEntryProjection findOneByReceiptID(String receiptID);

    ReceiptSOTunaiEntryProjection findOneByReceiptIDAndAhassCode(String receiptID, String ahassCode);

    ReceiptSOTunaiEntryProjection findOneBySoID(String soID);

    ReceiptSOTunaiEntryProjection findOneBySoIDAndReceiptType(String soID, ReceiptType receiptType);

    List<ReceiptSOTunaiEntryProjection> findAllBySoID(String soID);


    @Query("select rso from "
            + " ReceiptSOTunaiEntryProjection rso "
            + " where "
            + " rso.ahassCode=:ahassCode and "
            + " rso.receiptStatus=:receiptStatus "
            + " order by rso.id desc")
    public List<ReceiptSOTunaiEntryProjection> findAllByReceiptStatusAndAhassCode(@Param("receiptStatus") ReceiptStatus receiptStatus,
                                                                                  @Param("ahassCode") String ahassCode);

    @Query("select rso from "
            + " ReceiptSOBankEntryProjection rso "
            + " where "
            + " rso.ahassCode=:ahassCode and "
            + " rso.receiptStatus=:receiptStatus "
            + " order by rso.id desc")
    public List<ReceiptSOBankEntryProjection> findAllReceiptBankByReceiptStatusAndAhassCode(@Param("receiptStatus") ReceiptStatus receiptStatus,
                                                                                            @Param("ahassCode") String ahassCode);
}