/** Фоновый звук дождя при наличии дождя на сцене (`public/rain-ambient.mp3`). */

import { getEffectsSfxGain } from './effectsSfxGain';

const RAIN_AMBIENT_BASE_VOLUME = 0.7;

export function rainAmbientSoundUrl(): string {
  return new URL('rain-ambient.mp3', window.location.href).href;
}

let ambientEl: HTMLAudioElement | null = null;

function ensureAmbientEl(): HTMLAudioElement {
  if (ambientEl) return ambientEl;
  const el = new Audio(rainAmbientSoundUrl());
  el.loop = true;
  el.preload = 'auto';
  ambientEl = el;
  return el;
}

function applyVolume(el: HTMLAudioElement): void {
  el.volume = Math.max(0, Math.min(1, RAIN_AMBIENT_BASE_VOLUME * getEffectsSfxGain()));
}

/** Включить/выключить loop дождя. */
export function setRainAmbientActive(active: boolean): void {
  try {
    const el = ensureAmbientEl();
    applyVolume(el);
    if (active) {
      if (el.paused) void el.play().catch(() => undefined);
    } else if (!el.paused) {
      el.pause();
      el.currentTime = 0;
    }
  } catch {
    /* ignore */
  }
}

/** Обновить громкость, если ambient уже играет. */
export function syncRainAmbientVolume(): void {
  if (!ambientEl) return;
  try {
    applyVolume(ambientEl);
  } catch {
    /* ignore */
  }
}
