package com.erp.customer.entity;

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

import java.time.LocalDateTime;

/**
 * 客户关系实体类（8级客户关系 - 总店/分店）
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("customer_relationships")
public class CustomerRelationship {
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /**
     * 租户ID
     */
    private Long tenantId;
    
    /**
     * 客户ID
     */
    private Long customerId;
    
    /**
     * 客户名称（冗余）
     */
    private String customerName;
    
    /**
     * 父客户ID（NULL表示顶级/总店）
     */
    private Long parentCustomerId;
    
    /**
     * 父客户名称（冗余）
     */
    private String parentCustomerName;
    
    /**
     * 关系级别：1-8级
     * 1级：总店/总部
     * 2级：省级分店
     * 3级：市级分店
     * 4级：区级分店
     * 5级：区域分店
     * 6级：片区分店
     * 7级：街道分店
     * 8级：社区分店
     */
    private Integer relationshipLevel;
    
    /**
     * 关系类型：HEADQUARTERS/BRANCH/AFFILIATE/PARTNER
     * HEADQUARTERS - 总店/总部
     * BRANCH - 分店/分支机构
     * AFFILIATE - 关联公司
     * PARTNER - 合作伙伴
     */
    private String relationshipType;
    
    /**
     * 是否为总店
     */
    private Boolean isHeadquarters;
    
    /**
     * 所属集团/连锁名称
     */
    private String groupName;
    
    /**
     * 集团编码
     */
    private String groupCode;
    
    /**
     * 层级路径（如：/1/5/12/，便于查询某客户的所有上下游关系）
     */
    private String levelPath;
    
    /**
     * 层级深度（从1开始）
     */
    private Integer depth;
    
    /**
     * 是否直系上下级关系
     */
    private Boolean isDirectRelationship;
    
    /**
     * 关联关系说明
     */
    private String relationshipDesc;
    
    /**
     * 开始关联时间
     */
    private LocalDateTime associationStartAt;
    
    /**
     * 结束关联时间（解除关联时记录）
     */
    private LocalDateTime associationEndAt;
    
    /**
     * 关联状态：ACTIVE/INACTIVE/TERMINATED
     * ACTIVE - 有效关联
     * INACTIVE - 暂时无效
     * TERMINATED - 已解除关联
     */
    private String status;
    
    /**
     * 备注
     */
    private String remark;
    
    // ==================== 时间戳字段 ====================
    
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;
    
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
    
    /**
     * 删除时间
     */
    @TableLogic
    private LocalDateTime deletedAt;
    
    /**
     * 创建人ID
     */
    private Long creatorId;
    
    // ==================== 辅助方法 ====================
    
    /**
     * 判断是否为总店
     */
    public boolean isHeadquarters() {
        return Boolean.TRUE.equals(isHeadquarters);
    }
    
    /**
     * 判断是否为一级关系
     */
    public boolean isLevel1() {
        return relationshipLevel != null && relationshipLevel == 1;
    }
    
    /**
     * 判断关联是否有效
     */
    public boolean isActive() {
        return "ACTIVE".equalsIgnoreCase(status);
    }
    
    /**
     * 判断是否已解除关联
     */
    public boolean isTerminated() {
        return "TERMINATED".equalsIgnoreCase(status);
    }
}
