import type * as flexui from '@openflexui/core'
import { type GeneralComponent } from './component'

export class MediaQueryObserver {
  private _$comp: GeneralComponent
  private _$observer: flexui.backend.Observer | null = null

  /** @internal */
  constructor(comp: GeneralComponent) {
    this._$comp = comp
  }

  observe(
    descriptor: flexui.backend.MediaQueryStatus,
    listener: (status: { matches: boolean }) => void,
  ) {
    if (this._$observer) this._$observer.disconnect()
    this._$observer =
      this._$comp._$.getBackendContext()?.createMediaQueryObserver?.(descriptor, listener) || null
  }

  disconnect() {
    if (this._$observer) this._$observer.disconnect()
    this._$observer = null
  }
}