package com.chushang.inspection.work.dto;

import cn.hutool.core.date.DatePattern;
import com.chushang.inspection.terminal.vo.FiveStoreVO;
import com.chushang.inspection.work.vo.InspectionConfigVO;
import com.chushang.inspection.work.vo.WrkInfoStoreVO;
import com.chushang.inspection.work.vo.WrkInfoTerminalVO;
import com.chushang.inspection.work.vo.WrkInfoVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;

/**
 * @author 单傲
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WrkInfoDTO implements Serializable {
    /**
     * id
     */
    @NotNull(message = "工单id不能为空")
    private Long wrkId;
    /**
     * 巡检方式
     */
    @Range(min = 1, max = 2, message = "巡检方式非法")
    private Integer workMethod;
    /**
     * 工单类型
     */
    @Range(min = 1, max = 50, message = "工单类型非法")
    private Integer workType;
    /**
     * 状态
     */
    @NotNull(message = "工单状态不能为空")
    @Range(min = 1, max = 7, message = "状态非法")
    private Integer wrkStatus;
    /**
     * 备注
     */
    @Size(max = 100, message = "备注不能超过100个字符")
    private String remark;
    /**
     * 服务结果
     */
    @Range(min = 1, max = 7, message = "服务结果非法")
    private Integer serviceResult;
    /**
     * 操作员编号 -- 这个应当是提交人id
     */
    @Size(max = 50, message = "操作员编号不能超过50个字符")
    private String userId;
    /**
     * 客户经理
     */
    @Size(max = 30, message = "客户经理不能超过30个字符")
    private String accountManager;
    /**
     * 经理电话
     */
    @Size(max = 30, message = "经理电话不能超过30个字符")
    private String accountPhone;

    /**
     * 终端状态
     */
    @Range(min = 1, max = 20, message = "终端状态非法")
    private Integer terminalStatus;
    /**
     * 终端类型
     */
    @Range(min = 1, max = 10, message = "终端类型非法")
    private Integer terminalType;
    /**
     * 终端版本号
     */
    @Size(max = 64, message = "终端版本号不能超过64个字符")
    private String terminalVersion;
    /**
     * 终端地址
     */
    @Size(max = 300, message = "终端地址不能超过300个字符")
    private String terminalAddress;
    /**
     * 终端来源
     */
    @Range(min = 1, max = 3, message = "终端来源非法")
    private Integer terminalSource;
    /**
     * 终端编号
     */
    @Size(max = 30, message = "终端编号不能超过30个字符")
    private String terminalNo;
    /**
     * 终端sn号
     */
    @Size(max = 100, message = "终端sn号不能超过100个字符")
    private String terminalSn;
    /**
     * 终端型号
     */
    @Size(max = 64, message = "终端型号不能超过64个字符")
    private String terminalModel;



    /**
     * 商户编号
     */
    @Size(max = 64, message = "商户编号不能超过64个字符")
    private String storeNo;
    /**
     * 门店状态
     */
    @Range(min = 1, max = 10, message = "门店状态非法")
    private Integer storeStatus;
    /**
     * 商户名称
     */
    @Size(max = 128, message = "商户名称不能超过64个字符")
    private String storeName;
    /**
     * 商户联系人
     */
    @Size(max = 128, message = "商户联系人不能超过128个字符")
    private String storeContact;
    /**
     * 商户联系电话
     */
    @Size(max = 50, message = "商户联系方式不能超过50个字符")
    private String storePhone;
    /**
     * 商户地址
     */
    @Size(max = 300, message = "商户地址不能超过300个字符")
    private String storeAddress;
    /**
     * 商户特殊编号
     */
    @Size(max = 30, message = "特殊商户编号不能超过30个字符")
    private String specialNum;
    /**
     * 门店名称
     */
    @Size(max = 128, message = "门店名称不能超过128个字符")
    private String shopName;
    /**
     * 商户类型
     */
    @Range(min = 1, max = 10, message = "商户类型非法")
    private Integer storeType;
    /**
     * 现有其他收单产品
     */
    @Size(max = 50, message = "现有其他收单产品不能超过50个字符")
    private String products;
    /**
     * 商户提示工具
     */
    @Size(max = 50, message = "商户提示工具不能超过50个字符")
    private String tipTool;
    /**
     * 巡检频次
     */
    @Range(min = 1, max = 5, message = "巡检频次非法")
    private Integer insFre;
    /**
     * 注册地址
     */
    @Size(max = 128, message = "注册地址不能超过128个字符")
    private String registerAddress;
    /**
     * 法人/负责人
     */
    @Size(max = 64, message = "法人/负责人不能超过64个字符")
    private String legalName;
    /**
     * 地理位置信息 经度，纬度
     */
    @NotBlank(message = "地理位置信息不能为空")
    @Size(max = 128, message = "地理位置信息不能超过128个字符")
    private String geographicLocation;
    /**
     * 地理位置信息地址
     */
    @NotBlank(message = "地理位置信息地址")
    @Size(max = 256, message = "地理位置信息地址不能超过256个字符")
    private String locationAddress;


    /**
     * 任务id
     */
    @NotNull(message = "任务id不能为空")
    private Long taskId;
    /**
     * 建档日期
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATE_PATTERN)
    private LocalDate registerTime;
    /**
     * 巡检单信息
     */
    private List<InspectionConfigVO> inspections;

    /**
     * 五统一商户明细（内蒙古建行随付贷）
     */
    private FiveStoreVO fiveUnifiedStoreDetails;
}
