package com.cf.imes.module.executor.controller.admin.veneer.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 待贴皮分解板件响应参数。
 * 板件筛选字段参考未排单 {@code getPlanPlateData.plateList}，
 * 仅保留贴皮分解业务实际使用的数据。
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class VeneerDecomposePlateRespVO {

    @Schema(description = "板件ID")
    private Long plateId;

    @Schema(description = "板材商品编码")
    private String goodsId;

    @Schema(description = "板材名称")
    private String goodsName;

    @Schema(description = "板件编号")
    private String plateNo;

    @Schema(description = "自定义板件编号")
    private String customPlateNo;

    @Schema(description = "板件名称")
    private String name;

    @Schema(description = "板件名称，兼容原贴皮分解字段")
    private String plateName;

    @Schema(description = "房名")
    private String roomName;

    @Schema(description = "柜名")
    private String bodyName;

    @Schema(description = "颜色")
    private String color;

    @Schema(description = "品牌")
    private String brand;

    @Schema(description = "材质")
    private String material;

    @Schema(description = "板件高度")
    private BigDecimal height;

    @Schema(description = "板件高度，兼容原贴皮分解长度字段")
    private BigDecimal length;

    @Schema(description = "板件宽度")
    private BigDecimal width;

    @Schema(description = "板件厚度")
    private BigDecimal thickness;

    @Schema(description = "拆单宽度")
    private BigDecimal splitWidth;

    @Schema(description = "拆单高度")
    private BigDecimal splitHeight;

    @Schema(description = "拆单厚度")
    private BigDecimal splitThickness;

    @Schema(description = "是否异形")
    private Boolean isSpecialShaped;

    @Schema(description = "左封边厚度")
    private BigDecimal sealLeft;

    @Schema(description = "右封边厚度")
    private BigDecimal sealRight;

    @Schema(description = "上封边厚度")
    private BigDecimal sealUp;

    @Schema(description = "下封边厚度")
    private BigDecimal sealDown;

    @Schema(description = "左预留边")
    private BigDecimal reservedEdgeLeft;

    @Schema(description = "右预留边")
    private BigDecimal reservedEdgeRight;

    @Schema(description = "上预留边")
    private BigDecimal reservedEdgeUp;

    @Schema(description = "下预留边")
    private BigDecimal reservedEdgeDown;

    @Schema(description = "面积")
    private BigDecimal area;

    @Schema(description = "纹路类型：0正纹，1可翻转，2反纹")
    private Integer texture;

    @Schema(description = "孔面类型：0正面，1反面，2侧面")
    private Integer holeFace;

    @Schema(description = "排版面类型：0正面，1反面，2随意面")
    private Integer holeArrange;

    @Schema(description = "异型孔数量")
    private Integer unregularPointCount;

    @Schema(description = "正面孔数量")
    private Integer frontHoleCount;

    @Schema(description = "背面孔数量")
    private Integer backHoleCount;

    @Schema(description = "侧面孔数量")
    private Integer sideHoleCount;

    @Schema(description = "正面造型数量")
    private Integer frontModelCount;

    @Schema(description = "背面造型数量")
    private Integer backModelCount;

    @Schema(description = "是否门板")
    private Boolean isDoor;

    @Schema(description = "是否弧形对角")
    private Boolean isArcAcross;

    @Schema(description = "模块类型ID")
    private Long moduleTypeId;

    @Schema(description = "异形偏移X")
    private BigDecimal offsetX;

    @Schema(description = "异形偏移Y")
    private BigDecimal offsetY;

    @Schema(description = "备注")
    private String remark;

    @Schema(description = "板件类型：0层板，1立板，2背板，3自增板")
    private Integer type;

    @Schema(description = "加工组名称")
    private String processGroupName;

    @Schema(description = "开门类型：0无，1左，2右，3上，4下")
    private Integer openDoorType;

    @Schema(description = "是否有孔")
    private Boolean isRowHole;

    @Schema(description = "是否正反面造型")
    private Boolean isSculpt;

    @Schema(description = "是否侧面造型")
    private Boolean isSideSculpt;

    @Schema(description = "是否二维刀路")
    private Boolean is2v;

    @Schema(description = "是否侧面二维刀路")
    private Boolean isSide2v;

    @Schema(description = "是否双面造型")
    private Boolean doubleSideModel;

    @Schema(description = "是否双面排孔")
    private Boolean doubleSideHole;

    @Schema(description = "是否正面造型")
    private Boolean frontModel;

    @Schema(description = "是否背面造型")
    private Boolean backModel;

    @Schema(description = "是否正面排孔")
    private Boolean frontHole;

    @Schema(description = "是否反面排孔")
    private Boolean backHole;

    @Schema(description = "是否侧面造型")
    private Boolean sideModel;

    @Schema(description = "是否侧面排孔")
    private Boolean sideHole;

    /**
     * 解压后的板件造型 JSON，仅用于组装 {@code plateModels}，不直接返回前端。
     */
    @JsonIgnore
    private String modelData;
}
