package cokr.xit.ens.biz.iup.domain.repository;

import cokr.xit.ens.biz.iup.code.IupPrcsCd;
import cokr.xit.ens.biz.iup.code.IupSendTypeCd;
import cokr.xit.ens.biz.iup.domain.TbInputXit;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

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

import static cokr.xit.ens.biz.iup.domain.QFsJob.fsJob;
import static cokr.xit.ens.biz.iup.domain.QTbInputXit.tbInputXit;

@Slf4j
@Repository
@RequiredArgsConstructor
public class TbInputXitCustomRepositoryImpl implements TbInputXitCustomRepository<TbInputXit>{

    private final JPAQueryFactory query;

    @Override
    public Optional<TbInputXit> findByPrcsCdAndSendTypeAndId(IupPrcsCd prcsCd, IupSendTypeCd sendType, Long lnkInputId) {
        return Optional.ofNullable(query.selectFrom(tbInputXit)
                .innerJoin(tbInputXit.fsJob, fsJob)
                .fetchJoin()
                .where(
                        tbInputXit.prcsCd.eq(prcsCd)
                                .and(tbInputXit.sendType.eq(sendType))
                                .and(tbInputXit.lnkInputId.eq(lnkInputId))
                )
                .fetchOne());
    }

    @Override
    public List<TbInputXit> findAllByPrcsCdInAndSendType(List<IupPrcsCd> prcsCds, IupSendTypeCd sendType) {
        return query.selectFrom(tbInputXit)
                .innerJoin(tbInputXit.fsJob, fsJob)
                .fetchJoin()
                .where(
                        tbInputXit.prcsCd.in(prcsCds)
                                .and(tbInputXit.sendType.eq(sendType))
                )
                .fetch();
    }



}
