package com.ycwl.basic.puzzle.element.enums;

/**
 * 元素类型枚举
 *
 * @author Claude
 * @since 2025-01-18
 */
public enum ElementType {

    /**
     * 文字元素
     */
    TEXT("TEXT", "文字元素", "com.ycwl.basic.puzzle.element.impl.TextElement"),

    /**
     * 固定图片元素
     */
    IMAGE("IMAGE", "图片元素", "com.ycwl.basic.puzzle.element.impl.ImageElement"),

    /**
     * 二维码元素（未来扩展）
     */
    QRCODE("QRCODE", "二维码元素", "com.ycwl.basic.puzzle.element.impl.QRCodeElement"),

    /**
     * 渐变元素（未来扩展）
     */
    GRADIENT("GRADIENT", "渐变元素", "com.ycwl.basic.puzzle.element.impl.GradientElement"),

    /**
     * 形状元素（未来扩展）
     */
    SHAPE("SHAPE", "形状元素", "com.ycwl.basic.puzzle.element.impl.ShapeElement"),

    /**
     * 动态图片元素（未来扩展）
     */
    DYNAMIC_IMAGE("DYNAMIC_IMAGE", "动态图片元素", "com.ycwl.basic.puzzle.element.impl.DynamicImageElement");

    /**
     * 类型代码
     */
    private final String code;

    /**
     * 类型名称
     */
    private final String name;

    /**
     * 实现类全限定名
     */
    private final String implementationClass;

    ElementType(String code, String name, String implementationClass) {
        this.code = code;
        this.name = name;
        this.implementationClass = implementationClass;
    }

    public String getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    public String getImplementationClass() {
        return implementationClass;
    }

    /**
     * 根据code获取枚举
     *
     * @param code 类型代码
     * @return 枚举实例
     */
    public static ElementType fromCode(String code) {
        for (ElementType type : values()) {
            if (type.code.equalsIgnoreCase(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的元素类型: " + code);
    }

    /**
     * 检查类型是否已实现
     *
     * @return true-已实现，false-未实现
     */
    public boolean isImplemented() {
        return this == TEXT || this == IMAGE;
    }
}
