package kr.xit.biz.ens.mapper;

import java.util.*;

import org.egovframe.rte.psl.dataaccess.mapper.*;

import kr.xit.biz.ens.model.*;
import kr.xit.biz.ens.model.cmm.*;
import kr.xit.biz.ens.model.cntc.*;
import kr.xit.biz.ens.model.kakao.pay.*;
import kr.xit.biz.ens.model.kakao.talk.*;
import kr.xit.biz.ens.model.kt.KtMmsSendDTO.*;
import kr.xit.biz.ens.model.ktgbs.*;

/**
 * <pre>
 * description :
 *
 * packageName : kr.xit.biz.ens.mapper
 * fileName    : IEnsBatchMapper
 * author      : limju
 * date        : 2023-08-31
 * ======================================================================
 * 변경일         변경자        변경 내용
 * ----------------------------------------------------------------------
 * 2023-08-31    limju       최초 생성
 *
 * </pre>
 */
@Mapper
public interface IEnsBatchMapper {

    //----------------------------------------------------------------------
    // accept
    //----------------------------------------------------------------------
    /**
     * <pre>
     * 접수대상 조회
     * - tb_cntc_sndng_mastr, tb_ens_tmplat_manage
     * @param t T
     * @return List<EnsDTO.SndngMssageParam>
     * </pre>
     */
    <T> List<SndngMssageParam> selectAcceptTgts(final T t);
    /**
     * <pre>
     * 접수대상 조회
     * - tb_cntc_sndng_mastr, tb_cntc_sndng_detail
     * @param t T
     * @return List<EnsDTO.SndngMssageParam>
     * </pre>
     */
    <T> List<EnsDTO.SndngValidation> selectAcceptValidation(final T t);

    /**
     * <pre>
     * 통합발송마스터 생성
     * - tb_ens_unity_sndng_mastr
     * @param t status
     * @return int
     * </pre>
     */
    <T> int insertUnitySndngMst(final T t);

    /**
     * <pre>
     * 통합발송상세 생성
     * - tb_ens_unity_sndng_detail
     * @param t status
     * @return int
     * </pre>
     */
    <T> int insertUnitySndngDtls(final T t);

    /**
     * <pre>
     * 연계발송마스터 상태 변경
     * - tb_cntc_sndng_mastr : sndng_process_sttus
     * @param t status, newStatus
     * @return int
     * </pre>
     */
    <T> int updateProcessSttusCntcSndngMst(final T t);

    /**
     * <pre>
     * 주민번호(ihidnum)로 등록된 ci가 있는지 조회
     * 사용되지 않은(등록안된) 주민번호 이면 null 반환
     * 해당 주민번호의 ci가 없으면, ci가 null
     * @param ihidnum
     * @return
     * <pre>
     */
    Map<String, String> selectCiByIhidnum(final String ihidnum);

    int insertIhidnumManage(final Map<String, Object> paraMap);
    int insertCiManage(final Map<String, Object> paraMap);

    /**
     * nice CI 테이블에 등록
     * @param dto
     * @return
     */
    int insertCi(EnsDTO.NiceCiRslt dto);
    //----------------------------------------------------------------------
    // accept
    //----------------------------------------------------------------------

    //----------------------------------------------------------------------
    // make
    //----------------------------------------------------------------------
    /**
     * <pre>
     * 통합 발송 생성 대상 조회
     * - tb_ens_unity_sndng_mastr
     * @param t T
     * @return List<EnsDTO.SndngMssageParam>
     * </pre>
     */
    <T> List<SndngMssageParam> selectMakeTgts(final T t);

    /**
     * <pre>
     * 2차 발송 대상 건수 조회
     * - tb_ens_sndng_mastr, tb_ens_kakao_my_doc
     * - (NOT (tekmd.doc_box_status = 'READ' AND tekmd.error_code IS NULL)
     *    OR (tekmd.doc_box_status IS NULL and tekmd.error_code IS NULL))
     * @param t T
     * @return int
     * </pre>
     */
    <T> int selectKkopaySendOkTgts(final T t);
    <T> int selectKkotalkSendOkTgts(final T t);

    /**
     * <pre>
     * 발송마스터 생성
     * - tb_ens_sndng_mastr
     * @param t status
     * @return int
     * </pre>
     */
    <T> int insertSndngMst(final T t);

    /**
     * <pre>
     * 카카오페이 내문서함 생성
     * - tb_ens_kakao_my_doc
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKakaopay(final T t);
    <T> int insertKakaotalk(final T t);


    /**
     * <pre>
     * 모바일페이지 관리 생성
     * - tb_ens_mobile_page_manage
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKkopayMobilePageManage(final T t);
    <T> int insertKkotalkMobilePageManage(final T t);

    /**
     * <pre>
     * Kt 모바일페이지 관리 생성
     * - tb_ens_mobile_page_manage
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKtMobilePageManage(final T t);

    /**
     * <pre>
     * Kt 공인알림문자 마스타 데이터 생성
     * KT GIBIS 사용시는 skip
     * - tb_ens_kt_bc
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKtBcMastr(final T t);

    /**
     * <pre>
     * Kt 공인알림문자 디테일 데이터 생성
     * - tb_ens_kt_bc
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKtBcDetail(final T t);

    /**
     * <pre>
     * Kt Gibis 모바일페이지 관리 생성
     * - tb_ens_mobile_page_manage
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKtGbsMobilePageManage(final T t);

    /**
     * <pre>
     * Kt Gibis 디테일 데이터 생성
     * - tb_ens_kt_gbs
     * @param t T
     * @return int
     * </pre>
     */
    <T> int insertKtGbsDetail(final T t);

    /**
     * <pre>
     * 통합발송마스터 상태 변경
     * - tb_ens_unity_sndng_mastr : sndng_process_sttus
     * @param t status, newStatus
     * @return int
     * </pre>
     */
    <T> int updateProcessSttusUnitySndngMst(final T t);
    //----------------------------------------------------------------------
    // make
    //----------------------------------------------------------------------

    //----------------------------------------------------------------------
    // close
    //----------------------------------------------------------------------

    /**
     * <pre>
     * close 대상 조회
     * - tb_cntc_sndng_mastr
     * - sndng_process_sttus IN ('send-ok', 'sending1', 'sending2')
     * - clos_dt < date_format(adddate(now(), -1), '%Y%m%d%H%i%S')
     * @param t T
     * @return List<String>
     * </pre>
     */
    <T> List<String> selectCloseTgts(final T t);

    /**
     * <pre>
     * 발송마스터 상태 다건 변경
     * - tb_ens_sndng_mastr
     * @param t status, newStatus
     * @return int
     * </pre>
     */
    <T> int updateProcessSttusBulkSndngMst(final T t);
    //----------------------------------------------------------------------
    // close
    //----------------------------------------------------------------------

    //----------------------------------------------------------------------
    // send
    //----------------------------------------------------------------------
    /**
     * <pre>
     * 발송 대상 조회
     * - tb_ens_sndng_mastr, tb_ens_unity_sndng_mastr
     * - sndng_process_sttus : make-ok
     * @param t T
     * @return List<EnsDTO.SndngMssageParam>
     * </pre>
     */
    <T> List<SndngMssageParam> selectSendBulkTgts(final T t);

    /**
     * <pre>
     * 카카오페이 문서요청 대상 목록 조회
     * - tb_ens_sndng_mastr, tb_ens_kakao_my_doc, tb_ens_ci
     * @param t status
     * @return List<EnsDTO.SendKakaoTgt>
     * </pre>
     */
    <T> List<EnsDTO.SendKakaoTgt> selectKakaopaySendTgts(final T t);

    /**
     * <pre>
     * 카카오톡 전자고지 요청 대상 목록 조회
     * - tb_ens_sndng_mastr, tb_ens_kakao_d10, tb_ens_ci
     * @param t status
     * @return List<EnsDTO.SendKakaotalkTgt>
     * </pre>
     */
    <T> List<EnsDTO.SendKakaotalkTgt> selectKakaotalkSendTgts(final T t);
    /**
     * <pre>
     * 발송상태 조회 : 발송후 발송 연계 마스터의 발송상태 변경값 조회
     * - tb_ens_sndng_mastr, tb_ens_unity_sndng_mastr
     * @param t T
     * @return EnsDTO.SndngMssageParam
     * </pre>
     */
    <T> Optional<SndngMssageParam> selectSndProcessStatus(final T t);

    /**
     * <pre>
     * 카카오페이 문서요청 결과 반영
     * - tb_ens_kakao_my_doc
     * @param t 문서ID, 에러코드, 에러메세지, 외부문서ID
     * @return int
     * </pre>
     */
    <T> int updateKakaopaySendBulksResult(final T t);

    /**
     * <pre>
     * 카카오페이 문서요청 결과 반영
     * - tb_ens_kakao_d10
     * @param t 문서ID, 에러코드, 에러메세지, 외부문서ID
     * @return int
     * </pre>
     */
    <T> int updateKakaotalkSendBulksResult(final T t);
    /**
     * <pre>
     * 발송마스터 상태 변경
     * - tb_ens_sndng_mastr
     * @param t status, newStatus
     * @return int
     * </pre>
     */
    <T> int updateProcessSttusSndngMst(final T t);

    Optional<EnsKtBcDTO> selectKtBcMstTgtInfo(final SndngMssageParam dto);
    List<KtMainSendReqData> selectKtBcSendTgts(final SndngMssageParam dto);
    int updateKtBcMst(final SndngMssageParam dto);

    Optional<EnsKtGbsDTO> selectKtGbsMstTgtInfo(final SndngMssageParam dto);
    List<KtGbsDTO.MsgSendReqsData> selectKtGbsSendTgts(final SndngMssageParam dto);
    int updateKtGbs(final SndngMssageParam dto);

    //----------------------------------------------------------------------
    // send
    //----------------------------------------------------------------------


    //----------------------------------------------------------------------
    // status
    //----------------------------------------------------------------------
    /**
     * <pre>
     * 상태 조회 대상 조회
     * - tb_ens_sndng_mastr, tb_ens_unity_sndng_mastr
     * - sndng_process_sttus : 'send-ok', 'sending1', 'sending2'
     * @param t T
     * @return List<EnsDTO.SndngMssageParam>
     * </pre>
     */
    <T> List<SndngMssageParam> selectStatusBulkTgts(final T t);

    /**
     * <pre>
     * 카카오페이 문서 상태 조회 대상 목록 조회
     * - tb_ens_sndng_mastr, tb_ens_kakao_my_doc
     * @param dto EnsDTO.BatchEnsRequest
     * @return List<String>
     * </pre>
     */
    List<String> selectKakaopayStatusTgts(final SndngMssageParam dto);
    /**
     * <pre>
     * 카카오톡 문서 상태 조회 대상 목록 조회
     * - tb_ens_sndng_mastr, tb_ens_kakao_d10
     * @param dto EnsDTO.BatchEnsRequest
     * @return List<String>
     * </pre>
     */
    List<String> selectKakaotalkStatusTgts(final SndngMssageParam dto);

    /**
     * <pre>
     * 카카오페이 문서 상태 조회 결과 반영
     * - tb_ens_kakao_my_doc
     * @param dto EnsDTO.KakaoMyDoc
     * @return int
     * </pre>
     */
    int updateKakaopayStatusInfo(final KkopayDocBulkDTO.BulkStatus dto);
    /**
     * <pre>
     * 카카오톡 문서 상태 조회 결과 반영
     * - tb_ens_kakao_d10
     * @param dto EnsDTO.KakaoMyDoc
     * @return int
     * </pre>
     */
    int updateKakaotalkStatusInfo(final KkotalkDTO.EnvelopeStatusResponse dto);
    //----------------------------------------------------------------------
    // status
    //----------------------------------------------------------------------



    //----------------------------------------------------------------------
    // result
    //----------------------------------------------------------------------
    /**
     * <pre>
     * 연계발송결과 반영
     * - tb_elctrn_ntic_sndng_result, tb_ens_unity_sndng_detail
     * @param dto 발송구분코드, 발송결과 상태, 송신(요청)/수신(조회)/최초열람 일시, 에러내용
     * @return int
     * </pre>
     */
    int insertCntcSndngResult(final CntcDTO.SndngResult dto);

    /**
     * 연계발송결과반영 - 카카오페이
     * - tb_elctrn_ntic_sndng_result, tb_ens_kakao_my_doc
     * @param dto SndngResult
     * @return int
     */
    int updateCntcSndngResultByKkopay(final CntcDTO.SndngResult dto);
    /**
     * 연계발송결과반영 - 카카오톡
     * - tb_elctrn_ntic_sndng_result, tb_ens_kakao_d10
     * @param dto SndngResult
     * @return int
     */
    int updateCntcSndngResultByKkotalk(final CntcDTO.SndngResult dto);
    //----------------------------------------------------------------------
    // result
    //----------------------------------------------------------------------
}
