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

import cokr.xit.ens.biz.iup.domain.TbSendResult;
import cokr.xit.ens.core.utils.CmmnUtil;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

import static cokr.xit.ens.biz.iup.domain.QTbSendResult.tbSendResult;

@RequiredArgsConstructor
public class TbSendResultRepositoryImpl implements TbSendResultCustomRepository {

    private final JPAQueryFactory query;

    @Override
    public void modifyByTbSendResults(List<TbSendResult> list) {
        list.forEach(data -> query.update(tbSendResult)
                        .set(tbSendResult.prcsOdr, data.getPrcsOdr())
                        .set(tbSendResult.sendSttusCd, data.getSendSttusCd())
                        .set(tbSendResult.sendTrySttusCd, data.getSendTrySttusCd())
                        .set(tbSendResult.sendType, data.getSendType())
                        .set(tbSendResult.runDt, data.getRunDt())
                        .set(tbSendResult.bizSendDt, data.getBizSendDt())
                        .set(tbSendResult.bizRecvDt, data.getBizRecvDt())
                        .set(tbSendResult.bizReadDt, data.getBizReadDt())
                        .set(tbSendResult.bizErrMsg, data.getBizErrMsg())
                        .set(tbSendResult.regId, data.getRegId())
//                        .set(tbSendResult.regDt, data.getRegDt())
                        .set(tbSendResult.lastUpdt, LocalDateTime.now())
                        .set(tbSendResult.expiresDt, data.getExpiresDt())
                        .set(tbSendResult.prcsYn, data.getPrcsYn())
                        .where(tbSendResult.lnkInputId.eq(data.getLnkInputId())
                                .and(tbSendResult.dataId.eq(data.getDataId()))
                        )
                        .execute()
        );

    }

    @Override
    public Boolean findExistsByLnkInputIdAndPrcsOdr(Long lnkInputId, String prcsOdr) {
        Long result = query.select(tbSendResult.lnkInputId)
                .from(tbSendResult)
                .where(tbSendResult.lnkInputId.eq(lnkInputId)
                        .and(tbSendResult.prcsOdr.eq(prcsOdr))
                )
                .fetchFirst();
        return CmmnUtil.isEmpty(result) ? false : true;
    }
}
