package org.hzhub.crm.domain.bo;

import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hzhub.common.core.xss.Xss;
import org.hzhub.common.mybatis.core.domain.BaseEntity;
import org.hzhub.crm.domain.CrmLead;

import java.math.BigDecimal;

/**
 * CRM线索业务对象 crm_lead
 *
 * @author hzhub
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = CrmLead.class, reverseConvertGenerate = false)
public class CrmLeadBo extends BaseEntity {

    /**
     * 线索ID
     */
    private Long leadId;

    /**
     * ERP客户编码（可选）
     */
    private String customerCode;

    /**
     * 公司名称
     */
    @Xss(message = "公司名称不能包含脚本字符")
    @NotBlank(message = "公司名称不能为空")
    @Size(min = 0, max = 200, message = "公司名称长度不能超过{max}个字符")
    private String companyName;

    /**
     * 联系人
     */
    @Xss(message = "联系人不能包含脚本字符")
    @NotBlank(message = "联系人不能为空")
    @Size(min = 0, max = 100, message = "联系人长度不能超过{max}个字符")
    private String contactName;

    /**
     * 手机号
     */
    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    @Size(min = 0, max = 50, message = "手机号长度不能超过{max}个字符")
    private String mobile;

    /**
     * 微信号
     */
    @Size(min = 0, max = 100, message = "微信号长度不能超过{max}个字符")
    private String wechat;

    /**
     * 省
     */
    @Size(min = 0, max = 50, message = "省份长度不能超过{max}个字符")
    private String province;

    /**
     * 市
     */
    @Size(min = 0, max = 50, message = "城市长度不能超过{max}个字符")
    private String city;

    /**
     * 区域ID（关联 sys_dept）
     */
    private Long regionId;

    /**
     * 来源类型（字典：crm_lead_source）
     */
    private String sourceType;

    /**
     * 活动名称
     */
    @Size(min = 0, max = 100, message = "活动名称长度不能超过{max}个字符")
    private String activityName;

    /**
     * 推荐人
     */
    @Size(min = 0, max = 100, message = "推荐人长度不能超过{max}个字符")
    private String referrerName;

    /**
     * 行业（字典：crm_industry）
     */
    private String industry;

    /**
     * 公司规模（字典：crm_scale）
     */
    private String companyScale;

    /**
     * 门店数
     */
    private Integer storeCount;

    /**
     * AI意向等级（字典：crm_intent_level）
     */
    private String intentLevel;

    /**
     * AI评分
     */
    private BigDecimal aiScore;

    /**
     * 风险等级（字典：crm_risk_level）
     */
    private String riskLevel;

    /**
     * 负责人（关联 sys_user）
     */
    private Long ownerUserId;

    /**
     * 状态（字典：crm_lead_status）
     */
    private String leadStatus;

    /**
     * 转化经销商ID
     */
    private Long convertedDealerId;

    /**
     * 下次跟进时间
     */
    private String nextFollowTime;

    /**
     * 备注
     */
    @Size(min = 0, max = 500, message = "备注长度不能超过{max}个字符")
    private String remark;

    public CrmLeadBo(Long leadId) {
        this.leadId = leadId;
    }
}