package go.kr.project.api.service;

import go.kr.project.api.model.CarLedgerFrmbkDtlVO;
import go.kr.project.api.model.CarLedgerFrmbkVO;
import go.kr.project.api.model.response.NewLedgerResponse;

import java.util.List;

/**
 * 자동차 등록 원부(갑) 로그 전용 서비스 인터페이스
 * - 모든 로깅(write)은 별도 트랜잭션(REQUIRES_NEW)으로 수행하여 상위 트랜잭션 롤백의 영향을 받지 않도록 한다.
 */
public interface VmisCarLedgerFrmbkLogService {

    /**
     * 최초 요청 정보를 등록한다. (REQUIRES_NEW)
     * @param request 요청 정보
     * @return 생성된 ID
     */
    String createInitialRequestNewTx(CarLedgerFrmbkVO request);

    /**
     * 응답 결과를 업데이트한다. (REQUIRES_NEW)
     * @param response 업데이트 내용
     */
    void updateResponseNewTx(CarLedgerFrmbkVO response);

    /**
     * 상세 정보를 저장한다. (REQUIRES_NEW)
     * @param masterId 마스터 ID
     * @param details 상세 정보 리스트
     */
    void saveDetailsNewTx(String masterId, List<CarLedgerFrmbkDtlVO> details);

    /**
     * txId로 CAR_FFNLG_TRGT_ID를 업데이트한다. (REQUIRES_NEW, 지연/미필 공통)
     * @param response API 응답 객체
     * @param carFfnlgTrgtId 과태료 대상 ID (지연 또는 미필)
     */
    void updateCarFfnlgTrgtIdByTxIdNewTx(NewLedgerResponse response, String carFfnlgTrgtId);
}
