import { Injectable, signal } from '@angular/core';
import { DropdownButtonComponent } from './dropdown.component';

/**
 * Service zur Verwaltung des globalen Dropdown-Zustands.
 *
 * Stellt sicher, dass immer nur ein Dropdown gleichzeitig geöffnet ist.
 * Wenn ein neues Dropdown geöffnet wird, wird ein zuvor geöffnetes automatisch geschlossen.
 */
@Injectable({ providedIn: 'root' })
export class DropdownService {
  /**
   * Signal, das die aktuell geöffnete Dropdown-Instanz hält.
   * Ist `null`, wenn kein Dropdown geöffnet ist.
   */
  private _openDropdown = signal<DropdownButtonComponent<any> | null>(null);

  /**
   * Öffnet ein Dropdown und schließt ein zuvor geöffnetes automatisch.
   *
   * @param dropdown - Die Dropdown-Komponente, die geöffnet werden soll
   */
  open(dropdown: DropdownButtonComponent<any>) {
    const current = this._openDropdown();
    if (current && current !== dropdown) {
      current.close();
    }
    this._openDropdown.set(dropdown);
  }

  /**
   * Schliesst ein Dropdown, falls es aktuell als geöffnet registriert ist.
   *
   * @param dropdown - Die Dropdown-Komponente, die geschlossen werden soll
   */
  close(dropdown: DropdownButtonComponent<any>) {
    if (this._openDropdown() === dropdown) {
      this._openDropdown.set(null);
    }
  }
}
