package org.ta.pddserver.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.ta.pddserver.model.pddgd.response.GDTicketRepsonse;

import java.io.Serializable;
import java.util.List;

@Data
@TableName("gd_ticket")
public class GDTicketEntity {
    private static final long serialVersionUID = 1L;

    @TableId(value = "uid")
    private String uid;

    @TableField(value = "created")
    private String created;

    @TableField(value = "updated")
    private String updated;

    @TableField(value = "state")
    private Integer state;

    @TableField(value = "remarks")
    private String remarks;

    /**
     * 工单ID（唯一标识，自增或业务生成）
     * 数据库字段：ticket_id
     */
    @TableField(value = "status")
    private Long ticket_id;

    /**
     * 工单创建来源
     * 0：平台，1：消费者，2：商家
     * 数据库字段：create_type
     */
    @TableField(value = "status")
    private Integer create_type;

    /**
     * 收件地址（64位）
     * 工单来源为消费者时必填，其他来源为空
     * 数据库字段：receive_address
     */
    @TableField(value = "status")
    private String receive_address;

    /**
     * 揽件地址（64位）
     * 工单来源为商家时必填，其他来源为空
     * 数据库字段：send_address
     */
    @TableField(value = "status")
    private String send_address;

    /**
     * 订单号生成的物流单号（预生成物流单号）
     * 数据库字段：pre_delivery_id
     */
    @TableField(value = "status")
    private String pre_delivery_id;

    /**
     * 物流商处理结果
     * 数据库字段：handle_result
     */
    @TableField(value = "status")
    private String handle_result;

    /**
     * 物流商快递编码（关联物流商信息）
     * 数据库字段：express_company_id
     */
    @TableField(value = "status")
    private Integer express_company_id;

    /**
     * 赔付状态
     * 0：默认（未涉及赔付），1：未赔付，2：已赔付
     * 数据库字段：compensate_state
     */
    @TableField(value = "status")
    private Integer compensate_state;

    /**
     * 赔付金额（单位：分）
     * 数据库字段：compensate_amount
     */
    @TableField(value = "status")
    private Long compensate_amount;


    /**
     * 物流商回传凭证（List格式，存储附件信息）
     * 数据库存储：JSON字符串，查询时自动反序列化为List
     * 数据库字段：express_attachment
     */
    @TableField(value = "status")
    private List<GDTicketRepsonse.ExpressAttachment> express_attachment;

    /**
     * 签收状态
     * 0：默认（未涉及签收），1：未签收，2：已签收
     * 数据库字段：sign_state
     */
    @TableField(value = "status")
    private Integer sign_state;

    /**
     * 处理人（物流商侧处理工单的人员姓名）
     * 数据库字段：express_dealer
     */
    @TableField(value = "status")
    private String express_dealer;

    /**
     * 处理人联系方式（手机号或座机号）
     * 数据库字段：express_dealer_contact
     */
    @TableField(value = "status")
    private String express_dealer_contact;

    /**
     * 工单退回次数
     * 0：首次下发，1：二次下发，2：三次下发...
     * 数据库字段：retreat_count
     */
    @TableField(value = "status")
    private Integer retreat_count;

    /**
     * 联系人姓名（消费者姓名，工单来源为消费者时必填）
     * 数据库字段：receive_name
     */
    @TableField(value = "status")
    private String receive_name;

    /**
     * 联系人电话（消费者手机号，工单来源为消费者时必填）
     * 数据库字段：receive_contact
     */
    @TableField(value = "status")
    private String receive_contact;

    /**
     * 工单创建时间戳（毫秒级）
     * 数据库字段：created_at
     */
    @TableField(value = "status")
    private Long created_at;

    /**
     * 工单最后更新时间戳（含申诉、处理结果更新时间，毫秒级）
     * 数据库字段：updated_at
     */
    @TableField(value = "status")
    private Long updated_at;

    /**
     * 问题描述（工单核心问题标题，如"包裹丢失"、"派送延迟"）
     * 数据库字段：title
     */
    @TableField(value = "status")
    private String title;

    /**
     * 备注（申诉内容、补充说明，最大长度2048字符）
     * 数据库字段：description
     */
    @TableField(value = "status")
    private String description;

    /**
     * 问题来源
     * 0：买家，1：卖家
     * 数据库字段：source
     */
    @TableField(value = "status")
    private Integer source;

    /**
     * 运单号（可能为空，如未生成物流单的预咨询工单）
     * 数据库字段：waybill_no
     */
    @TableField(value = "status")
    private String waybill_no;

    /**
     * 紧急度
     * 0：中，1：紧急
     * 数据库字段：urgent_type
     */
    @TableField(value = "status")
    private Integer urgent_type;

    /**
     * 问题类型ID（关联问题类型表，如1-丢件，2-损件）
     * 数据库字段：type_id
     */
    @TableField(value = "status")
    private Integer type_id;

    /**
     * 客服创建工单时上传的附件列表（List格式，存储附件URL）
     * 数据库存储：JSON字符串，查询时自动反序列化为List
     * 数据库字段：attach_url
     */
    @TableField(value = "status")
    private List<String> attach_url;

    /**
     * 物流商回复状态
     * 0：待回复，1：已回复
     * 数据库字段：status
     */
    @TableField(value = "status")
    private Integer status;

    /**
     * 末端品牌代码（如自提柜品牌编码，非末端工单为空）
     * 数据库字段：cabinet_code
     */
    @TableField(value = "status")
    private String cabinet_code;

    /**
     * 物流投诉标签（数组格式，存储标签ID，如[1,3,5]）
     * 数据库存储：JSON字符串，查询时自动反序列化为List
     * 数据库字段：sub_type_ids
     */
    @TableField(value = "status")
    private List<Integer> subTypeIds;

    /**
     * 寄件单号（退货场景下的寄件订单号，非退货工单为空）
     * 数据库字段：mail_order_sn
     */
    @TableField(value = "status")
    private String mail_order_sn;

    /**
     * 订单金额（单位：分，关联工单对应的订单金额）
     * 数据库字段：pay_amount
     */
    @TableField(value = "status")
    private Long pay_amount;

    /**
     * 国家/区域名称（集运工单特有，如"美国"、"中国香港"）
     * 数据库字段：area_name
     */
    @TableField(value = "status")
    private String area_name;

    /**
     * 用户投诉时上传的附件URL（数组格式，存储URL）
     * 数据库存储：JSON字符串，查询时自动反序列化为List
     * 数据库字段：attachment_urls_by_customer
     */
    @TableField(value = "status")
    private List<String> attachment_urls_by_customer;

    /**
     * 物流商回传凭证DTO（内部静态类，封装附件详情）
     * 对应 express_attachment 字段的List元素结构
     */
    @Data
    public static class ExpressAttachment implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 附件URL（如图片、文档链接）
         */
        private String url;

    }
}
