/**
 * Registra un hook Livewire solo una vez por componente.
 * @param {string} hookName - Nombre del hook Livewire (por ejemplo, "morphed").
 * @param {string} componentName - Nombre exacto del componente Livewire.
 * @param {function} callback - Función que se ejecutará una vez por hook+componente.
 */
export default function registerLivewireHookOnce(hookName, componentName, callback) {
    if (!hookName || !componentName || typeof callback !== 'function') {
        console.warn('[registerLivewireHookOnce] Parámetros inválidos.');
        return;
    }

    // Clave única para este hook+componente
    const safeName = componentName.replace(/[^a-zA-Z0-9]/g, '_');
    const key = `__hook_${hookName}_${safeName}`;

    if (!window[key]) {
        window[key] = true;

        Livewire.hook(hookName, ({ component }) => {
            if (component.name === componentName) {
                // console.info(`[Livewire Hook Triggered] ${hookName} for ${component.name}`);
                callback(component);
            }
        });
    }
}
