package com.erp.customer.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 客户跟进记录实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("customer_follow_ups")
public class CustomerFollowUp {
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /**
     * 租户ID
     */
    private Long tenantId;
    
    /**
     * 客户ID
     */
    private Long customerId;
    
    /**
     * 客户名称（冗余字段，便于查询）
     */
    private String customerName;
    
    /**
     * 跟进类型：CALL/VISIT/EMAIL/SMS/WECHAT/OTHER
     * CALL - 电话跟进
     * VISIT - 实地拜访
     * EMAIL - 邮件跟进
     * SMS - 短信跟进
     * WECHAT - 微信跟进
     * OTHER - 其他方式
     */
    private String followType;
    
    /**
     * 跟进主题
     */
    private String subject;
    
    /**
     * 跟进内容
     */
    private String content;
    
    /**
     * 跟进结果：SUCCESS/PENDING/FAILED
     * SUCCESS - 成功
     * PENDING - 待处理
     * FAILED - 失败
     */
    private String result;
    
    /**
     * 意向等级：HIGH/MEDIUM/LOW
     * HIGH - 高意向
     * MEDIUM - 中意向
     * LOW - 低意向
     */
    private String intentionLevel;
    
    /**
     * 下次跟进时间
     */
    private LocalDateTime nextFollowUpAt;
    
    /**
     * 下次跟进计划
     */
    private String nextFollowUpPlan;
    
    /**
     * 附件URLs（JSON格式）
     */
    private String attachments;
    
    /**
     * 跟进状态：DONE/PENDING/CANCELLED
     * DONE - 已完成
     * PENDING - 待跟进
     * CANCELLED - 已取消
     */
    private String status;
    
    /**
     * 跟进人员ID
     */
    private Long followUpUserId;
    
    /**
     * 跟进人员姓名
     */
    private String followUpUserName;
    
    /**
     * 所属部门
     */
    private String department;
    
    /**
     * 备注
     */
    private String remark;
    
    // ==================== 时间戳字段 ====================
    
    /**
     * 跟进时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime followUpAt;
    
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;
    
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
    
    /**
     * 删除时间
     */
    @TableLogic
    private LocalDateTime deletedAt;
    
    // ==================== 辅助方法 ====================
    
    /**
     * 判断是否已完成
     */
    public boolean isDone() {
        return "DONE".equalsIgnoreCase(status);
    }
    
    /**
     * 判断是否需要下次跟进
     */
    public boolean needsNextFollowUp() {
        return nextFollowUpAt != null && "PENDING".equalsIgnoreCase(status);
    }
    
    /**
     * 判断是否为高意向
     */
    public boolean isHighIntention() {
        return "HIGH".equalsIgnoreCase(intentionLevel);
    }
}
