import { MeshStandardMaterial, Color, Vector3, DoubleSide } from "three";
import { Text } from "troika-three-text";
import { assignParams } from "@/lib/MeshUtils";

class TextObject {
    constructor(engine, obj) {
        const txt = new Text();
        // Set properties to configure:
        txt.text = obj.text;
        txt.fontSize = 0.033;
        txt.lineHeight = 1.1;
        txt.maxWidth = obj.width;
        txt.textAlign = 'center';
        txt.font = obj.fontPath;
        txt.anchorX = 'center';
        txt.anchorY = 'bottom';
        txt.curveRadius = 0;
        txt.outlineColor = 0xffffff;
        txt.outlineWidth = '15%';
        txt.depthOffset = 0.1;
        //txt.outlineBlur = '50%';
        txt.color = new Color(0x0);
        assignParams(txt, obj)
        let m = new MeshStandardMaterial({
            roughness: .73,
            metalness: .37,
            side: DoubleSide
        });
        txt.material = m;
        txt.sync();
        this.txt = txt;
        this.object = txt;
        // if (obj.effect == 'distance') {
        //     let dstm = .8;
        //     var oldBR = txt.onBeforeRender;
        //     txt.material[1].opacity = 0.01;
        //     txt.onBeforeRender = function (renderer, scene, camera) {
        //         oldBR && oldBR.apply(this, arguments);
        //         var v = new Vector3();
        //         txt.getWorldPosition(v);
        //         var dst = camera.position.distanceTo(v);
        //         if (dst < dstm * 2 && dst > dstm * 1) {
        //             txt.material[1].opacity = dstm * 1 - (dst - dstm * 1);
        //         }
        //         if (dst < .5 * dstm) {
        //             txt.material[1].opacity = dstm * dst * 2;
        //         }
        //     };
        // }
    }
}

export {TextObject}