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_element
 *
 * 重构说明：
 * - element_type 从TINYINT改为VARCHAR，支持TEXT、IMAGE、QRCODE等类型
 * - 删除所有type-specific字段，改用JSON配置存储
 * - 通过config字段存储元素特定配置，支持灵活扩展
 *
 * @author Claude
 * @since 2025-01-18
 */
@Data
@TableName("puzzle_element")
public class PuzzleElementEntity {

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

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

    /**
     * 元素类型（TEXT-文字 IMAGE-图片 QRCODE-二维码等）
     */
    @TableField("element_type")
    private String elementType;

    /**
     * 元素标识（用于动态数据映射）
     */
    @TableField("element_key")
    private String elementKey;

    /**
     * 元素名称（便于管理识别）
     */
    @TableField("element_name")
    private String elementName;

    /**
     * JSON配置（元素特定配置）
     *
     * 示例：
     * - 文字元素：{"defaultText":"用户名", "fontFamily":"微软雅黑", "fontSize":14, ...}
     * - 图片元素：{"defaultImageUrl":"https://...", "imageFitMode":"COVER", "borderRadius":10, ...}
     */
    @TableField("config")
    private String config;

    // ===== 位置和布局属性（所有元素通用） =====

    /**
     * X坐标（相对于画布左上角，像素）
     */
    @TableField("x_position")
    private Integer xPosition;

    /**
     * Y坐标（相对于画布左上角，像素）
     */
    @TableField("y_position")
    private Integer yPosition;

    /**
     * 宽度（像素）
     */
    @TableField("width")
    private Integer width;

    /**
     * 高度（像素）
     */
    @TableField("height")
    private Integer height;

    /**
     * 层级（数值越大越靠上，决定绘制顺序）
     */
    @TableField("z_index")
    private Integer zIndex;

    /**
     * 旋转角度（0-360度，顺时针）
     */
    @TableField("rotation")
    private Integer rotation;

    /**
     * 不透明度（0-100，100为完全不透明）
     */
    @TableField("opacity")
    private Integer opacity;

    // ===== 元数据 =====

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

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

    /**
     * 删除标记：0-未删除 1-已删除
     */
    @TableField("deleted")
    private Integer deleted;

    /**
     * 删除时间
     */
    @TableField("deleted_at")
    private Date deletedAt;
}
