package com.malk.kuaikeli.entity;

import cn.hutool.core.annotation.Alias;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.malk.server.aliwork.YDConf;
import com.malk.utils.UtilDateTime;
import com.malk.utils.UtilMap;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

// 供应商原材料
@Data
@EqualsAndHashCode
@TableName("t_supplier_material")
public class SupplierMaterial {

    // 供应商
    @Alias("associationFormField_lphya7cq")
    private String supplier;

    // 供应商编号
    @Alias("textField_llzzbyj1")
    private String supplierId;

    // 供应商名称
    @Alias("textField_lmsli3bq")
    private String supplierName;

    // 物品名称
    @Alias("textField_llkb7kd1")
    private String materialName;

    // 物品编号
    @TableId(value = "material_id",type = IdType.INPUT)
    @Alias("textField_llkb7kd2")
    private String materialId;

    // 单位
    @Alias("textField_llkb7kd3")
    private String unit;

    // 规格
    @Alias("textField_llkb7kd4")
    private String specs;

    // 第一分类
    @Alias("selectField_llkb7kd5")
    private String classifyOne;

    // 第二分类
    @Alias("selectField_llkk6cms")
    private String classifyTwo;

    // 成本单价
    @Alias("numberField_llkknd6g")
    private String unitPrice;

    // 下周成本单价
    @Alias("numberField_lpalgz05")
    private String unitPriceNext;

    // 其他信息
    @Alias("textareaField_lllnl6yr")
    private String otherInfo;

    // 图片
//    @Alias("imageField_lllnl6ys")
    private String img;

    // 品牌
    @Alias("textField_lmkfg67e")
    private String brand;

    // 状态
    @Alias("textField_lm4lxur8")
    private String state="已启用";

    // 期限
    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @Alias("dateField_lm4lxur7")
    private String term;

    // 包装数量
    @Alias("numberField_lnrzzg03")
    private String packingNumber;

    // 包装单位
    @Alias("textField_lnrzzg04")
    private String packingUnit;

    // 是否需要提供资质
    @Alias("textField_loe2rojc")
    private String needQualification;

    // 是否已提供资质 是/否
    @Alias("radioField_lpt4h37t")
    private String provideQualification;

    // 原材料资质
//    @Alias("attachmentField_loe2rojd")
    private String qualification;

    // 资质到期日期
    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @Alias("dateField_lpt4h37y")
    private String qualificationExpireDate;

    private String formInstId;

    // 是否需要同步到宜搭
    private String isNeedSyncYd;

    // 同步到中间表数量
    private String materialDetailNumber;

    // 创建日期
    private String createDateTime;

    // 更新日期
    private String updateDateTime;

    // 错误消息
    private String errorMsg;

    public SupplierMaterial(){}

    public static SupplierMaterial toBean(Map yidaFormData){
        return BeanUtil.mapToBean(yidaFormData,SupplierMaterial.class,false);
    }

    public Map toYidaFormDataMap(){
        Map map=BeanUtil.beanToMap(this);
        // 时间处理
        map.put("dateField_lpt4h37y", UtilDateTime.getLocalDateTimeTimeStamp(UtilDateTime.parseLocalDateTime(this.qualificationExpireDate)));
        map.put("dateField_lm4lxur7", UtilDateTime.getLocalDateTimeTimeStamp(UtilDateTime.parseLocalDateTime(this.term)));
        // 关联表单处理
        String instId=supplier.substring(supplier.indexOf("[FINST")+1,supplier.length()-1);
        map.put("associationFormField_lphya7cq", Arrays.asList(UtilMap.map("title, instanceId, appType, formUuid, formType",supplierName,instId, "APP_OHSG8KMIP9SGXV32XUQJ","FORM-L8966281A3LDP5UX77OYM6LBPEUM3TODBOLLL0","receipt")));
        return map;
    }

    public SupplierMaterial create(){
        this.isNeedSyncYd="是";
        this.createDateTime = (LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        return this;
    }

    public SupplierMaterial update(){
        this.updateDateTime = (LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        return this;
    }
}
