package com.liquidnet.service.goblin.dto.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Map;

/**
 * 店铺订单列表 - 各状态 Tab 数量。
 * 对应前端 statusTabs：全部 / 待支付(0) / 待发货(2) / 已发货(3) / 已完成(4) / 已退款(6)
 */
@ApiModel("店铺订单列表-各状态数量")
@Data
public class GoblinStoreOrderStatusCountVo {

    /** 全部（含其他 status，如取消单等） */
    @ApiModelProperty("全部")
    private long all;
    /** 待支付 status=0 */
    @ApiModelProperty("待支付[status=0]")
    private long pendingPay;
    /** 待发货 status=2 */
    @ApiModelProperty("待发货[status=2]")
    private long pendingShip;
    /** 已发货 status=3 */
    @ApiModelProperty("已发货[status=3]")
    private long shipped;
    /** 已完成 status=4 */
    @ApiModelProperty("已完成[status=4]")
    private long completed;
    /** 已退款 status=6 */
    @ApiModelProperty("已退款[status=6]")
    private long refunded;

    /**
     * 从 Mongo 按 status 分组统计结果组装 VO。
     * 新增 Tab 时在此补充 getOrDefault 即可。
     */
    public static GoblinStoreOrderStatusCountVo of(long all, Map<Integer, Long> grouped) {
        GoblinStoreOrderStatusCountVo vo = new GoblinStoreOrderStatusCountVo();
        vo.all = all;
        vo.pendingPay = grouped.getOrDefault(0, 0L);
        vo.pendingShip = grouped.getOrDefault(2, 0L);
        vo.shipped = grouped.getOrDefault(3, 0L);
        vo.completed = grouped.getOrDefault(4, 0L);
        vo.refunded = grouped.getOrDefault(6, 0L);
        return vo;
    }
}
