package cokr.xit.ens.modules.common.ctgy.intgrnbill.support.service.trigger;

import cokr.xit.ens.modules.common.ctgy.intgrnbill.support.entity.Bill;

import java.util.Map;

/**
 * 결제 이벤트 시점 트리거 서비스 템플릿
 */
public abstract class PaymentTriggerServiceTemplate implements PaymentTriggerService {

    /**
     * 결제정보
     *
     * @param param
     * @return
     */
    @Override
    public Map<String, Object> payInfo(Map<PTriggerDataKeys, Object> param) {
        if (!existsBill((String) param.get(PTriggerDataKeys.billUid)))
            generateBill((Bill) param.get(PTriggerDataKeys.bill));
        return getPayInfo(param);
    }

    /**
     * 청구서데이터 유무 확인
     *
     * @param billUid 청구서UID
     * @return
     */
    abstract protected boolean existsBill(String billUid);

    /**
     * 청구서데이터 생성
     *
     * @param bill
     */
    abstract protected void generateBill(Bill bill);

    /**
     * 청구서 납부(결제)정보 가져오기
     *
     * @param param
     * @return
     */
    abstract protected Map<String, Object> getPayInfo(Map<PTriggerDataKeys, Object> param);

}
