package com.bonus.material.index.domain;

import cn.hutool.core.annotation.Alias;
import com.bonus.material.device.domain.vo.DevInfoPropertyVo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 装备Excel导出实体类
 * 存储装备导出所需的详细信息，含固定9组特征项
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaDevInfoXlsxExport {

    private Integer maId;

    @Alias("产权单位")
    @ApiModelProperty(value = "专业")
    private String propertyUnit;

    /**
     * 专业
     */
    @Alias("专业")
    @ApiModelProperty(value = "专业")
    private String major;

    /**
     * 工序（子工序）
     */
    @Alias("工序")
    @ApiModelProperty(value = "工序")
    private String subProcess;

    /**
     * 装备类目（小类目）
     */
    @Alias("装备类目")
    @ApiModelProperty(value = "装备类目")
    private String subCategory;
    /**
     * 类型分支（装备分支）
     */
    @Alias("装备名称")
    @ApiModelProperty(value = "类型分支")
    private String name;
    /**
     * 规格型号
     */
    @Alias("规格型号")
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    /**
     * 装备编码
     */
    @Alias("装备编码")
    @ApiModelProperty(value = "装备编码")
    private String code;

    /**
     * 装备编码
     */
    @Alias("装备原始编码")
    @ApiModelProperty(value = "装备编码")
    private String originalCode;


    /**
     * 装备编码
     */
    @Alias("装备状态")
    @ApiModelProperty(value = "装备编码")
    private String status;
    /**
     * 使用年限
     */
    @Alias("使用年限")
    @ApiModelProperty(value = "使用年限")
    private String serviceLife;

    /**
     * 计量单位
     */
    @Alias("计量单位")
    @ApiModelProperty(value = "计量单位")
    private String unit;

    /**
     * 资产原值（元）
     */
    @Alias("资产原值（元）")
    @ApiModelProperty(value = "资产原值（元）")
    private Integer originalValue;


    /**
     * 资产原值（元）
     */
    @Alias("净值")
    @ApiModelProperty(value = "资产原值（元）")
    private Integer original;
    /**
     * 生产厂家
     */
    @Alias("生产厂家")
    @ApiModelProperty(value = "生产厂家")
    private String manufacturer;

    /**
     * 出厂日期
     */
    @Alias("出厂日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @ApiModelProperty(value = "出厂日期（yyyy-MM-dd）")
    private String productionDate;


    /**
     * 最大使用年限（年）
     */
    @Alias("最大使用年限（年）")
    @ApiModelProperty(value = "最大使用年限（年）")
    private Integer maxServiceLifeYears;

    /**
     * 最大使用年限（年）
     */
    @Alias("录入人")
    @ApiModelProperty(value = "最大使用年限（年）")
    private String creator;


    /**
     * 最大使用年限（年）
     */
    @Alias("录入时间")
    @ApiModelProperty(value = "最大使用年限（年）")
    private String createTime;


    // 固定9组特征项+特征值
    @Alias("特征项1")
    @ApiModelProperty(value = "特征项1")
    private String propertyName1;

    @Alias("特征值1")
    @ApiModelProperty(value = "特征值1")
    private String propertyValue1;

    @Alias("特征项2")
    @ApiModelProperty(value = "特征项2")
    private String propertyName2;

    @Alias("特征值2")
    @ApiModelProperty(value = "特征值2")
    private String propertyValue2;

    @Alias("特征项3")
    @ApiModelProperty(value = "特征项3")
    private String propertyName3;

    @Alias("特征值3")
    @ApiModelProperty(value = "特征值3")
    private String propertyValue3;

    @Alias("特征项4")
    @ApiModelProperty(value = "特征项4")
    private String propertyName4;

    @Alias("特征值4")
    @ApiModelProperty(value = "特征值4")
    private String propertyValue4;

    @Alias("特征项5")
    @ApiModelProperty(value = "特征项5")
    private String propertyName5;

    @Alias("特征值5")
    @ApiModelProperty(value = "特征值5")
    private String propertyValue5;

    @Alias("特征项6")
    @ApiModelProperty(value = "特征项6")
    private String propertyName6;

    @Alias("特征值6")
    @ApiModelProperty(value = "特征值6")
    private String propertyValue6;

    @Alias("特征项7")
    @ApiModelProperty(value = "特征项7")
    private String propertyName7;

    @Alias("特征值7")
    @ApiModelProperty(value = "特征值7")
    private String propertyValue7;

    @Alias("特征项8")
    @ApiModelProperty(value = "特征项8")
    private String propertyName8;

    @Alias("特征值8")
    @ApiModelProperty(value = "特征值8")
    private String propertyValue8;

    @Alias("特征项9")
    @ApiModelProperty(value = "特征项9")
    private String propertyName9;

    @Alias("特征值9")
    @ApiModelProperty(value = "特征值9")
    private String propertyValue9;

    /**
     * 特征项列表（不导出，用于映射到上述9组字段）
     */
    private List<DevInfoPropertyVo> propertyVoList;

    /**
     * 自动填充特征项到9组固定字段（核心优化：避免手动赋值）
     * 调用时机：propertyVoList设置后执行
     */
    public void fillPropertyFields() {
        if (CollectionUtils.isEmpty(propertyVoList)) {
            return; // 无特征项，直接返回
        }

        // 循环处理前9个特征项（超过9个则忽略，符合Excel固定列设计）
        for (int i = 0; i < Math.min(propertyVoList.size(), 9); i++) {
            DevInfoPropertyVo property = propertyVoList.get(i);
            int index = i + 1; // 特征项序号（1~9）

            // 根据序号设置对应的特征项名称和值（通过反射简化重复代码）
            try {
                // 设置特征项名称（propertyName1~9）
                this.getClass().getDeclaredField("propertyName" + index)
                        .set(this, property.getPropertyName()); // 假设DevInfoPropertyVo的特征项名称字段是propertyKey
                // 设置特征值（propertyValue1~9）
                this.getClass().getDeclaredField("propertyValue" + index)
                        .set(this, property.getPropertyValue()); // 假设特征值字段是propertyValue
            } catch (Exception e) {
                // 反射异常时跳过该特征项，不影响整体导出
                e.printStackTrace();
            }
        }
    }

}