package cn.nianxx.thhotel.workflows.reservation.common.result;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.OffsetDateTime;
import java.util.List;

/**
 * query_object_detail 返回数据。第一版以本系统订单快照为主，OPERA 投影字段允许为空。
 *
 * @param objectId 查询对象 ID
 * @param objectType 查询对象类型
 * @param orderId 本系统订单 ID
 * @param orderKeyType 订单业务号类型
 * @param groupCode Group Code
 * @param confirmationNumber Confirmation Number
 * @param reservationNo OPERA reservation no，当前无可靠来源时为空
 * @param blockId OPERA block id，当前无可靠来源时为空
 * @param temporaryOrderCode 临时订单号
 * @param displayName 用户可读展示名
 * @param status 订单状态
 * @param sourceMessageId 来源 SourceMessage ID
 * @param createdFromTaskId 创建该订单的任务 ID
 * @param createdAt 创建时间
 * @param lastUpdatedAt 最近更新时间
 * @param arrivalDate 到店日期，当前无可靠来源时为空
 * @param departureDate 离店日期，当前无可靠来源时为空
 * @param nights 间夜数，当前无可靠来源时为空
 * @param guestCount 客人数，当前无可靠来源时为空
 * @param roomItems 房型明细，当前无可靠来源时为空数组
 * @param rateCode 房价代码，当前无可靠来源时为空
 * @param rateCodePrice 房价，当前无可靠来源时为空
 * @param reservationType 预订类型，当前无可靠来源时为空
 * @param cancelStatus 取消状态摘要
 * @param canUpdate 是否允许继续创建更新类任务
 * @param canCancel 是否允许继续创建取消类任务
 * @param hardValidationWarnings 对象详情硬校验缺口警告
 */
public record ReservationAiObjectDetailResult(
        @JsonProperty("object_id")
        String objectId,
        @JsonProperty("object_type")
        String objectType,
        @JsonProperty("order_id")
        String orderId,
        @JsonProperty("order_key_type")
        String orderKeyType,
        @JsonProperty("group_code")
        String groupCode,
        @JsonProperty("confirmation_number")
        String confirmationNumber,
        @JsonProperty("reservation_no")
        String reservationNo,
        @JsonProperty("block_id")
        String blockId,
        @JsonProperty("temporary_order_code")
        String temporaryOrderCode,
        @JsonProperty("display_name")
        String displayName,
        String status,
        @JsonProperty("source_message_id")
        String sourceMessageId,
        @JsonProperty("created_from_task_id")
        String createdFromTaskId,
        @JsonProperty("created_at")
        OffsetDateTime createdAt,
        @JsonProperty("last_updated_at")
        OffsetDateTime lastUpdatedAt,
        @JsonProperty("arrival_date")
        String arrivalDate,
        @JsonProperty("departure_date")
        String departureDate,
        Integer nights,
        @JsonProperty("guest_count")
        Integer guestCount,
        @JsonProperty("room_items")
        List<RoomItem> roomItems,
        @JsonProperty("rate_code")
        String rateCode,
        @JsonProperty("rate_code_price")
        String rateCodePrice,
        @JsonProperty("reservation_type")
        String reservationType,
        @JsonProperty("cancel_status")
        String cancelStatus,
        @JsonProperty("can_update")
        Boolean canUpdate,
        @JsonProperty("can_cancel")
        Boolean canCancel,
        @JsonProperty("hard_validation_warnings")
        List<ReservationAiQueryWarningResult> hardValidationWarnings
) {

    /**
     * 房型明细摘要。当前系统没有 OPERA 投影时返回空数组。
     *
     * @param roomType 房型展示名
     * @param pmsRoomTypeCode PMS 房型代码
     * @param roomQuantity 房间数量
     * @param rateCode 房价代码
     * @param rateCodePrice 房价
     */
    public record RoomItem(
            @JsonProperty("room_type")
            String roomType,
            @JsonProperty("pms_room_type_code")
            String pmsRoomTypeCode,
            @JsonProperty("room_quantity")
            Integer roomQuantity,
            @JsonProperty("rate_code")
            String rateCode,
            @JsonProperty("rate_code_price")
            String rateCodePrice
    ) {
    }
}
