import { Vector3 } from "three";

import { slerp } from "../../engine/engine_three_utils.js";
import { applyPrototypeExtensions, registerPrototypeExtensions } from "./ExtensionUtils.js";

/** @internal */
export function apply(object: Vector3) {
    if (object && object.isVector3 === true) {
        applyPrototypeExtensions(object, Vector3);
    }
}

// NOTE: keep in sync with method declarations below
declare module 'three' {
    export interface Vector3 {
        slerp(end: Vector3, t: number): Vector3;
    }
}

let initialized = false;

export function initVectorExtensions() {
    if (initialized) return;
    initialized = true;

    Vector3.prototype["slerp"] = function (end: Vector3, t: number) {
        return slerp(this, end, t);
    }

    registerPrototypeExtensions(Vector3);
}
