package com.ycwl.basic.puzzle.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Map;

/**
 * 拼图元素DTO（重构版）
 *
 * 重构说明：
 * - elementType从Integer改为String
 * - 删除所有type-specific字段
 * - 新增config和configMap字段
 *
 * @author Claude
 * @since 2025-01-18
 */
@Data
public class PuzzleElementDTO {

    /**
     * 元素ID
     */
    @JsonProperty("id")
    private Long id;

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

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

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

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

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

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

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

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

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

    /**
     * 层级（数值越大越靠上）
     */
    @JsonProperty("zIndex")
    private Integer zIndex;

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

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

    // ===== JSON配置 =====

    /**
     * JSON配置字符串
     */
    @JsonProperty("config")
    private String config;

    /**
     * JSON配置Map（方便前端使用）
     */
    @JsonProperty("configMap")
    private Map<String, Object> configMap;
}
