package com.snack.server.module.order.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单主表
 *
 * 对应数据库表：orders
 */
@Data
@TableName("orders")
public class Order implements Serializable {

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

    /** 订单号（业务唯一） */
    private String orderNo;

    /** 下单用户 ID */
    private Long userId;

    /** 商品总金额（未优惠） */
    private BigDecimal totalAmount;

    /** 运费 */
    private BigDecimal freightAmount;

    /** 优惠金额（满减/折扣） */
    private BigDecimal discountAmount;

    /** 使用的优惠券 ID */
    private Long couponId;

    /** 优惠券抵扣金额 */
    private BigDecimal couponAmount;

    /** 实付金额 */
    private BigDecimal payAmount;

    /** 状态：0-待付款 1-待发货 2-待收货 3-已完成 4-已取消 5-已退款 */
    private Integer status;

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

    /** 收货人手机号 */
    private String receiverPhone;

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

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

    /** 物流公司 */
    private String trackingCompany;

    /** 物流单号 */
    private String trackingNo;

    /** 支付时间 */
    private LocalDateTime payTime;

    /** 发货时间 */
    private LocalDateTime deliverTime;

    /** 收货时间 */
    private LocalDateTime receiveTime;

    /** 取消时间 */
    private LocalDateTime cancelTime;

    /** 完成时间 */
    private LocalDateTime finishTime;

    /** 支付渠道：alipay / wechat / balance */
    private String payChannel;

    /** 第三方支付平台交易号（支付宝/微信返回） */
    private String payTradeNo;

    /** 退款交易号（支付宝/微信返回） */
    private String refundTradeNo;

    /** 退款时间 */
    private LocalDateTime refundTime;

    /** 退款原因 */
    private String refundReason;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
