package com.ruoyi.system.dto;

import java.math.BigDecimal;
import java.util.List;
import lombok.Data;

/**
 * 优惠算价请求DTO
 *
 * 入参说明：
 * - storeId   (必填) 门店ID
 * - items     (必填) 购物车商品列表 [{productId, quantity, specPrice}]，不传商品价格，后端从数据库查；
 *               specPrice(选填)规格加价，可为0或不传，实付单价=商品价格+规格价格
 * - couponId  (选填) 用户要使用的优惠券ID，对应 promotion_user_coupon.id，每单只能用一张
 * - forcePath (选填) 强制指定路径 "A"(折扣/第二份半价) 或 "B"(满减)，不传则系统自动选最优
 */
@Data
public class PromotionCalcRequest {

    /** 门店ID (必填) */
    private Long storeId;

    /** 购物车商品列表 (必填) */
    private List<CartItem> items;

    /** 优惠券ID (选填, 对应 promotion_user_coupon.id, 每单只能用一张) */
    private Long couponId;

    /** 强制指定路径 "A" 或 "B" (选填, 不传则系统自动选最优) */
    private String forcePath;

    /**
     * 购物车商品项
     */
    @Data
    public static class CartItem {
        /** 商品ID */
        private Long productId;
        /** 购买数量 */
        private Integer quantity;
        /** 规格加价(选填, 可为0或不传) — 有规格商品时除商品价外需加上的规格价格，实付单价=商品价格+规格价格 */
        private BigDecimal specPrice;
    }
}
