package com.erp.order.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("orders")
public class Order {

    @TableId(type = IdType.AUTO)
    private Long id;

    /** 订单短ID，如 O20240401ABC123 */
    private String shortId;

    /** 平台订单号 */
    private String platformOrderSn;

    /** 平台：taobao/jd/pdd/douyin/weixin等 */
    private String platform;

    /** 店铺ID */
    private Long shopId;

    /** 店铺名称 */
    private String shopName;

    /** 下单时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime orderTime;

    /** 买家昵称 */
    private String buyerNick;

    /** 收货人姓名 */
    private String receiverName;

    /** 收货人电话 */
    private String receiverPhone;

    /** 收货地址 */
    private String receiverAddress;

    /** 商品金额 */
    private BigDecimal goodsAmount;

    /** 优惠金额 */
    private BigDecimal discountAmount;

    /** 运费 */
    private BigDecimal freight;

    /** 订单总金额 */
    private BigDecimal totalAmount;

    /** 订单状态: pending/auditing/shipped/completed/cancelled */
    private String orderStatus;

    /** 平台状态（原始平台订单状态） */
    private String platformStatus;

    /** 审核状态: pending/approved/rejected */
    private String auditStatus;

    /** 发货状态: pending/delivered */
    private String deliveryStatus;

    /** 仓库ID */
    private Long warehouseId;

    /** 仓库名称 */
    private String warehouseName;

    /** 快递公司 */
    private String expressCompany;

    /** 快递名称 */
    private String expressName;

    /** 快递单号 */
    private String expressNo;

    /** 发货时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime deliveryTime;

    /** 订单完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    /** 审核备注/驳回原因 */
    private String auditComment;

    /** 订单备注 */
    private String remark;

    /** 乐观锁版本号 */
    @Version
    private Integer version;

    /** 创建时间 */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdAt;

    /** 更新时间 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updatedAt;

    /** 逻辑删除标记 */
    @TableLogic
    private Integer deleted;

    /** 订单项列表（不映射到数据库字段） */
    @TableField(exist = false)
    private List<OrderItem> items;
}
