import { Camera, Object3D } from "three";

import type { ICameraController } from "./engine_types.js";


const $cameraController = "needle:cameraController";

/** Get the camera controller for the given camera (if any)
 */
export function getCameraController(cam: Camera): ICameraController | null {
    return cam[$cameraController];
}

/** Set the camera controller for the given camera */
export function setCameraController(cam: Camera, cameraController: ICameraController, active: boolean) {
    if (active)
        cam[$cameraController] = cameraController;
    else {
        if (cam[$cameraController] === cameraController)
            cam[$cameraController] = null;
    }
}


const autofit = "needle:autofit";

/** @internal */
export function useForAutoFit(obj: Object3D): boolean {
    // if autofit is not defined we assume it may be included
    if (obj[autofit] === undefined) return true;
    // otherwise if anything is set except false we assume it should be included
    return obj[autofit] !== false;
}

/**
 * Enable or disable autofitting for the given object
 */
export function setAutoFitEnabled(obj: Object3D, enabled: boolean): void {
    obj[autofit] = enabled;
}