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_addresses")
public class CustomerAddress {
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /**
     * 租户ID
     */
    private Long tenantId;
    
    /**
     * 客户ID
     */
    private Long customerId;
    
    /**
     * 客户名称（冗余）
     */
    private String customerName;
    
    /**
     * 地址类型：DELIVERY/INVOICE/BILLING/COMPANY/HOME/OTHER
     * DELIVERY - 收货地址
     * INVOICE - 发票地址
     * BILLING - 账单地址
     * COMPANY - 公司地址
     * HOME - 家庭地址
     * OTHER - 其他地址
     */
    private String addressType;
    
    /**
     * 收货人姓名
     */
    private String receiverName;
    
    /**
     * 收货人电话
     */
    private String receiverPhone;
    
    /**
     * 收货人手机
     */
    private String receiverMobile;
    
    /**
     * 省
     */
    private String province;
    
    /**
     * 市
     */
    private String city;
    
    /**
     * 区/县
     */
    private String district;
    
    /**
     * 街道/详细地址
     */
    private String street;
    
    /**
     * 详细地址（完整）
     */
    private String fullAddress;
    
    /**
     * 邮编
     */
    private String postalCode;
    
    /**
     * 经度
     */
    private Double longitude;
    
    /**
     * 纬度
     */
    private Double latitude;
    
    /**
     * 地图标注名称
     */
    private String mapLabel;
    
    /**
     * 是否默认地址
     */
    private Boolean isDefault;
    
    /**
     * 是否为发货地址
     */
    private Boolean isDeliveryAddress;
    
    /**
     * 是否为发票地址
     */
    private Boolean isInvoiceAddress;
    
    /**
     * 营业时间
     */
    private String businessHours;
    
    /**
     * 联系人姓名
     */
    private String contactName;
    
    /**
     * 联系人电话
     */
    private String contactPhone;
    
    /**
     * 楼层/门牌号
     */
    private String floorUnit;
    
    /**
     * 附近地标
     */
    private String nearbyLandmark;
    
    /**
     * 备注
     */
    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 String getFullAddressText() {
        StringBuilder sb = new StringBuilder();
        if (province != null) sb.append(province);
        if (city != null) sb.append(city);
        if (district != null) sb.append(district);
        if (street != null) sb.append(street);
        return sb.toString();
    }
    
    /**
     * 判断是否为默认地址
     */
    public boolean isDefault() {
        return Boolean.TRUE.equals(isDefault);
    }
    
    /**
     * 判断是否有坐标
     */
    public boolean hasCoordinates() {
        return longitude != null && latitude != null;
    }
}
