package cn.nianxx.thhotel.workflows.reservation.repository;

import cn.nianxx.thhotel.workflows.reservation.common.dto.ReservationInvoiceGenerationDraft;
import java.time.LocalDateTime;

/**
 * Reservation Invoice 生成记录持久化边界。
 */
public interface ReservationInvoiceGenerationRepository {

    /**
     * 新增生成记录，并返回生成记录 ID。
     */
    Long insertGeneration(ReservationInvoiceGenerationDraft draft);

    /**
     * 标记生成成功，保存 Excel / PDF 对象路径和金额摘要。
     */
    void markSucceeded(
            Long generationId,
            String calculatedTotalsJson,
            String generatedExcelObjectKey,
            String pdfObjectKey,
            String pdfUrl,
            LocalDateTime now);

    /**
     * 记录已上传的 Excel 对象路径。即使后续 PDF 转换失败，也保留排查入口。
     */
    void recordGeneratedExcel(Long generationId, String generatedExcelObjectKey, LocalDateTime now);

    /**
     * 记录已上传的 PDF 对象路径。成功状态仍由业务审计完成后统一标记。
     */
    void recordGeneratedPdf(Long generationId, String pdfObjectKey, String pdfUrl, LocalDateTime now);

    /**
     * 标记生成失败，只保存安全错误码和安全摘要。
     */
    void markFailed(Long generationId, String safeErrorCode, String safeErrorSummary, LocalDateTime now);
}
