package com.czg.print;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 商品报表打印实体
 *
 * @author ww
 */
@Data
@Accessors(chain = true)
public class ProductReportPrintDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 店铺名称
     */
    private String shopName;

    /**
     * 打印时间
     */
    private String printTime;

    /**
     * 操作人
     */
    private String operator;

    /**
     * 统计时间
     */
    private String statisticsTime;

    /**
     * 总计商品数量
     */
    private BigDecimal totalProductCount;

    /**
     * 总计实收金额
     */
    private BigDecimal totalActualAmount;

    /**
     * 商品明细列表
     * 分类名称,商品集合
     */
    private List<CategoryItem> items;


    @Data
    @Accessors(chain = true)
    public static class CategoryItem {

        /**
         * 商品名称（第二列商品名称）
         */
        private String categoryName;

        /**
         * 数量（第三列数量）
         */
        private BigDecimal number;

        /**
         * 实收（第四列）
         */
        private BigDecimal actualAmount;

        /**
         * 销售额（第五列）
         */
        private BigDecimal salesAmount;

        /**
         * 商品明细列表
         */
        private List<ProductItem> productItems;
    }

    public ProductItem createProductItem(String productName, BigDecimal number, BigDecimal actualAmount, BigDecimal salesAmount) {
        ProductItem item = new ProductItem();
        item.setProductName(productName);
        item.setNumber(number);
        item.setActualAmount(actualAmount);
        item.setSalesAmount(salesAmount);
        return item;
    }

    /**
     * 商品明细项
     *
     * @author ww
     */
    @Data
    @Accessors(chain = true)
    public static class ProductItem {

        /**
         * 商品名称（第二列商品名称）
         */
        private String productName;

        /**
         * 数量（第三列数量）
         */
        private BigDecimal number;

        /**
         * 实收（第四列）
         */
        private BigDecimal actualAmount;

        /**
         * 销售额（第五列）
         */
        private BigDecimal salesAmount;
    }
}