package com.tiedup.remake.items.bondage3d;

import java.util.Set;

/**
 * Configuration immutable for a 3D item.
 * Contains all parameters necessary for rendering.
 */
public record Model3DConfig(
    String objPath, // "tiedup:models/obj/ball_gag/model.obj"
    String texturePath, // "tiedup:models/obj/ball_gag/texture.png" (or null = use MTL)
    float posOffsetX, // Horizontal offset
    float posOffsetY, // Vertical offset (negative = lower)
    float posOffsetZ, // Depth offset (positive = forward)
    float scale, // Scale (1.0 = normal size)
    float rotOffsetX, // Additional X rotation
    float rotOffsetY, // Additional Y rotation
    float rotOffsetZ, // Additional Z rotation
    Set<String> tintMaterials // Material names to apply color tint (e.g., "Ball")
) {
    /** Config without tinting */
    public static Model3DConfig simple(String objPath, String texturePath) {
        return new Model3DConfig(
            objPath,
            texturePath,
            0,
            0,
            0,
            1.0f,
            0,
            0,
            0,
            Set.of()
        );
    }

    /** Config with position/rotation but no tinting */
    public Model3DConfig(
        String objPath,
        String texturePath,
        float posOffsetX,
        float posOffsetY,
        float posOffsetZ,
        float scale,
        float rotOffsetX,
        float rotOffsetY,
        float rotOffsetZ
    ) {
        this(
            objPath,
            texturePath,
            posOffsetX,
            posOffsetY,
            posOffsetZ,
            scale,
            rotOffsetX,
            rotOffsetY,
            rotOffsetZ,
            Set.of()
        );
    }

    /** Check if this item supports color tinting */
    public boolean supportsTinting() {
        return tintMaterials != null && !tintMaterials.isEmpty();
    }
}
