package com.ycwl.basic.puzzle.entity;

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.util.Date;

/**
 * 拼图生成记录实体类
 * 对应表：puzzle_generation_record
 *
 * @author Claude
 * @since 2025-01-17
 */
@Data
@TableName("puzzle_generation_record")
public class PuzzleGenerationRecordEntity {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 模板ID
     */
    @TableField("template_id")
    private Long templateId;

    /**
     * 模板编码（冗余字段，方便查询）
     */
    @TableField("template_code")
    private String templateCode;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 人脸ID（用于关联素材和追溯）
     */
    @TableField("face_id")
    private Long faceId;

    /**
     * 业务类型（如：order-订单 ticket-门票 certificate-证书）
     */
    @TableField("business_type")
    private String businessType;

    // ===== 生成参数和结果 =====

    /**
     * 生成参数（动态数据，JSON格式存储）
     */
    @TableField("generation_params")
    private String generationParams;

    /**
     * 内容哈希（SHA256）
     * 用于去重检测,基于所有元素的实际内容计算
     */
    @TableField("content_hash")
    private String contentHash;

    /**
     * 生成的图片URL
     */
    @TableField("result_image_url")
    private String resultImageUrl;

    /**
     * 文件大小（字节）
     */
    @TableField("result_file_size")
    private Long resultFileSize;

    /**
     * 生成图片宽度
     */
    @TableField("result_width")
    private Integer resultWidth;

    /**
     * 生成图片高度
     */
    @TableField("result_height")
    private Integer resultHeight;

    // ===== 状态和性能统计 =====

    /**
     * 状态：0-生成中 1-成功 2-失败
     */
    @TableField("status")
    private Integer status;

    /**
     * 错误信息（失败时记录）
     */
    @TableField("error_message")
    private String errorMessage;

    /**
     * 生成耗时（毫秒）
     */
    @TableField("generation_duration")
    private Integer generationDuration;

    /**
     * 重试次数
     */
    @TableField("retry_count")
    private Integer retryCount;

    // ===== 多租户和扩展字段 =====

    /**
     * 景区ID
     */
    @TableField("scenic_id")
    private Long scenicId;

    /**
     * 客户端IP
     */
    @TableField("client_ip")
    private String clientIp;

    /**
     * 客户端User-Agent
     */
    @TableField("user_agent")
    private String userAgent;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private Date updateTime;
}
