import type { UnwrapRef } from 'vue'
import { ref, isRef } from 'vue'

export default class RefUtils {
  /**
   * Convertit la valeur du filtre en référence. S'il s'agit déjà d'une ref,
   * selon que `maintainReactivity` est vrai ou faux, on conserve la référence existante
   * ou bien on la recréé pour briser la réactivité.
   *
   * @param value
   * @param maintainReactivity
   */
  static castToRef<T>(
    value: T | Ref<T>,
    maintainReactivity: boolean = true,
  ): Ref<T> | Ref<UnwrapRef<T>> {
    if (isRef(value)) {
      if (maintainReactivity) {
        return value
      } else {
        return ref(value.value as T)
      }
    } else {
      return ref(value as T)
    }
  }
}
