package cn.iocoder.yudao.module.visit.controller.admin.info.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import javax.validation.constraints.*;
import java.math.BigDecimal;

@Schema(description = "管理后台 - 客户拜访记录新增/修改 Request VO")
@Data
public class InfoSaveReqVO {

    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Long id;

    @Schema(description = "客户姓名", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "客户姓名不能为空")
    private String customerName;

    @Schema(description = "联系方式（客户手机号）")
    @Pattern(regexp = "^$|^\\d{11}$", message = "联系方式必须是11位数字")
    private String contact;

    @Schema(description = "客户公司名称", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "客户公司名称不能为空")
    private String companyName;

    @Schema(description = "省名称", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "省名称不能为空")
    private String provinceName;

    @Schema(description = "市名称", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "市名称不能为空")
    private String cityName;

    @Schema(description = "区名称", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "区名称不能为空")
    private String areaName;

    @Schema(description = "所在地区")
    @NotEmpty(message = "所在地区不能为空")
    private String regionFullName;

    @Schema(description = "定位地址文字描述", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "定位地址文字描述不能为空")
    private String locationText;

    @Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "经度不能为空")
    private BigDecimal longitude;

    @Schema(description = "纬度", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "纬度不能为空")
    private BigDecimal latitude;

    @Schema(description = "定位静态图URL", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "定位静态图URL不能为空")
    private String locationImage;

    @Schema(description = "拜访日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "拜访日期不能为空")
    private LocalDateTime visitDate;

    @Schema(description = "性质等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "性质等级不能为空")
    private Integer customerStatus;

    @Schema(description = "拜访品种（多选，逗号分隔）")
    private String visitProductIds;

    @Schema(description = "拜访品种名称（多选，逗号分隔）")
    private String visitProductNames;

    @Schema(description = "拜访方式（字典）")
    private Integer visitMethod;

    @Schema(description = "拜访类型（字典）", example = "2")
    private Integer visitType;

    @Schema(description = "客户所属部门（字典）")
    private String department;

    @Schema(description = "服务内容")
    private String serviceContent;

    @Schema(description = "客户反馈")
    private String customerFeedback;

    @Schema(description = "服务记录图片URL列表（JSON数组）")
    private String serviceImages;

}