import { useCallback, useState } from "react";

interface UseNotificationSoundOptions {
  enabled?: boolean;
  volume?: number;
  soundUrl?: string;
}

export const useNotificationSound = ({
  enabled = true,
  volume = 0.5,
  soundUrl = "/notification.mp3",
}: UseNotificationSoundOptions = {}) => {
  const [isPlaying, setIsPlaying] = useState(false);

  const playSound = useCallback(async () => {
    if (!enabled || isPlaying) {
      console.log("صدا غیرفعال است یا در حال پخش");
      return;
    }

    try {
      setIsPlaying(true);
      console.log("شروع پخش صدا...", { soundUrl, volume, enabled });

      const audio = new Audio();
      audio.preload = "auto";
      audio.src = soundUrl;
      audio.volume = Math.max(0, Math.min(1, volume));

      // Add event listeners
      audio.addEventListener("ended", () => {
        console.log("پخش صدا تمام شد");
        setIsPlaying(false);
      });

      audio.addEventListener("error", (e) => {
        console.error("خطا در پخش صدا:", e);
        setIsPlaying(false);
      });

      // Wait for audio to be ready
      if (audio.readyState >= 2) {
        await audio.play();
        console.log("🔊 صدای نوتیفیکیشن پخش شد");
      } else {
        audio.addEventListener("canplay", async () => {
          try {
            await audio.play();
            console.log("🔊 صدای نوتیفیکیشن پخش شد");
          } catch (playError) {
            console.error("خطا در پخش بعد از آماده شدن:", playError);
            setIsPlaying(false);
          }
        });
      }
    } catch (error) {
      console.error("خطا در ایجاد audio element:", error);
      setIsPlaying(false);
    }
  }, [enabled, isPlaying, soundUrl, volume]);

  const stopSound = useCallback(() => {
    setIsPlaying(false);
  }, []);

  return {
    playSound,
    stopSound,
    isPlaying,
  };
};
