const trackIds = [
  "1",
  "7RSxZ3w7CAWsAvQNEwFeMG6VJQFPuvIZ.mp3",
  "8EaEeMt1yUuDyGhc2Jj0gKo2Yu59lzMY.mp3",
  "G1GAfLx23GeLdLxf7EwQeaIQzXrukgA7.mp3",
  "J7ink7QvmKrVcFcw3zjpEJ5uZbX56let.mp3",
  "JXmASv8ELu46RkOtZ8bpfjdP7dtumxQ7.mp3",
  "KE0fMMvVPIoBnmpsixdriCbVComDor1y.mp3",
  "Kp3B6JxK8Fa09gEBN929KJ8wDYIT0ftQ.mp3",
  "M8xawvxxFFZyAnvL3g5so9Mojk17Kufs.mp3",
  "MNeehw5AiE0qRm306kIfiePEWaIE13aQ.mp3",
  "NHQcz6BsUiri40PjtCG4CXsUwla5aZ5Z.mp3",
  "PEgtcvoKLhKNZHAWZwkVT7Jq9cwBSljb.mp3",
  "Pk5xtxbKVnPZX01UrznpgaARt2tW0lbq.mp3",
  "Q85BptFWeM4FtSrRPXYUUNOaPHVqfJIf.mp3",
  "SLcLR4tePvfPPC6drDK4Be33RaBDm1GD.mp3",
  "SQANPnRv1nYkwRrbFvoOxCd2SHqpPa1s.mp3",
  "TWcMZ1QSZAlyc8oECwRsl8vM5uf61JAp.mp3",
  "UatFyXqISCd14SyeeAZMnqcwTIoNJtQ9.mp3",
  "Xxd77h92rms0AS8xihFm14Jlm8UMf2NK.mp3",
  "Z3n0iwfGaGgA5K2nfm8zCsxDOdfr5Pnf.mp3",
  "ZX8WjTexojqrusji6Oc89mObC7ZuSjeg.mp3",
  "aFBiKZ12vxDF6bfTmFyP9kk7tcU1627G.mp3",
  "elmwig21dwP7LnpBuUUNX7y7wqrnviYz.mp3",
  "hiiU8SZQbkgR5gU5RpNXleJ11AeoBIM1.mp3",
  "jrlbAwxQYConMkx8SoQ1mVQoCZs4A68A.mp3",
  "jzrFFyAKinIdbDyhnL7rQAwYuCArhwBf.mp3",
  "k0Kz31SSPXYdZU8VXZtvfrGvA7ZLFuve.mp3",
  "n0ynCuEv4T8hVNHdhtrBgQAGITYCALOd.mp3",
  "wXl4HGnGyCDnXKq1nF3VeWpw1DmQbDwr.mp3",
  "setup.mp3"
]

const audioPrefix = 'melody/';
const SAYA = document.getElementById("SAYA")

let currentAudio = new Audio();
currentAudio.volume = 0.2;
let isFirstClick = true;
let clickStartTime = 0;

let isSliderHeld = false;
let lastSliderReleaseTime = 0;
let sliderHoldInterval = null;
let sliderAutoMaxChance = 0.1; // 10% de probabilidad
let sliderAutoMaxInterval = 500; // 0.5 segundos

const unicodeRanges = [
    { start: 0x0020, end: 0x007F },   // Basic Latin
    { start: 0x00A0, end: 0x00FF },   // Latin-1 Supplement
    { start: 0x0900, end: 0x097F },
    { start: 0x0980, end: 0x09FF },
    { start: 0x20A0, end: 0x20CF },
    { start: 0x2190, end: 0x21FF },
    { start: 0x2500, end: 0x25FF },
    { start: 0x25A0, end: 0x25FF },
    { start: 0x3040, end: 0x309F },
    { start: 0x30A0, end: 0x30FF },
    { start: 0x2500, end: 0x00FF },
    // Agrega más rangos Unicode aquí
  ];

  function getRandomUnicode(length) {
    let result = '';
    for (let i = 0; i < length; i++) {
      const randomRange = unicodeRanges[Math.floor(Math.random() * unicodeRanges.length)];
      const randomCharCode = Math.floor(Math.random() * (randomRange.end - randomRange.start + 1)) + randomRange.start;
      result += String.fromCharCode(randomCharCode);
    }
    return result;
  }


function playRandomSong() {
  // Detener la canción actual si está reproduciéndose
  if (!currentAudio.paused) {
    currentAudio.pause();
    currentAudio.currentTime = 0;
  }

  // Elegir un ID de canción aleatorio
  const randomTrackId = trackIds[Math.floor(Math.random() * trackIds.length)];

  // Configurar la fuente del audio con el ID aleatorio
  currentAudio.src = audioPrefix + randomTrackId;

  // Reproducir la canción
  currentAudio.play();
}

document.addEventListener('click', () => {
  if (isFirstClick) {
    playRandomSong();
    isFirstClick = false;
  }
});

SAYA.addEventListener("click", () => {
    playRandomSong();
})

document.addEventListener('mousedown', () => {
  clickStartTime = new Date().getTime();
});

currentAudio.addEventListener('ended', playRandomSong);

// Agregar opciones al dropdown según las posiciones en el array
const dropdown = document.querySelector('select');
trackIds.forEach((trackId, index) => {
    const option = document.createElement('option');
    const randomLength = Math.floor(Math.random() * (53 - 7 + 1)) + 7;
    const randomUnicode = getRandomUnicode(randomLength);
    option.textContent = randomUnicode;
    dropdown.appendChild(option);
  });


  function generateRandomUnicodeString() {
    const minLength = 7;
    const maxLength = 53;
    const stringLength = Math.floor(Math.random() * (maxLength - minLength + 1)) + minLength;
    let result = '';
    const characters = '\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF';
    const charArray = characters.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g);
    for (let i = 0; i < stringLength; i++) {
      const randomIndex = Math.floor(Math.random() * charArray.length);
      result += charArray[randomIndex];
    }
    return result;
  }

// Cambiar la canción al seleccionar una opción del dropdown
dropdown.addEventListener('change', (event) => {
    const selectedIndex = Array.from(dropdown.options).indexOf(event.target.selectedOptions[0]);
    if (selectedIndex >= 0 && selectedIndex < trackIds.length) {
      currentAudio.pause();
      currentAudio.currentTime = 0;
      currentAudio.src = audioPrefix + trackIds[selectedIndex];
      currentAudio.play();
    }
  });

function generateRandomUnicode() {
    const randomCodePoint = Math.floor(Math.random() * (0x1F4AF - 0x1F300 + 1)) + 0x1F300;
    return String.fromCodePoint(randomCodePoint);
  }


  document.getElementById('slider').addEventListener('input', (event) => {
    if (isSliderHeld) {
      clearInterval(sliderHoldInterval);
    }
    isSliderHeld = true;
    sliderHoldInterval = setInterval(() => {
      if (isSliderHeld && Math.random() < sliderAutoMaxChance) {
        event.target.value = event.target.max;
        currentAudio.volume = 1;
      }
    }, sliderAutoMaxInterval);
  
    const newVolume = parseFloat(event.target.value);
    currentAudio.volume = newVolume/100;
  });

  const slider = document.getElementById("slider")

  slider.addEventListener('input', (event) => {
    const currentTime = new Date().getTime();
    if (isSliderHeld && (currentTime - lastSliderReleaseTime) >= sliderAutoMaxInterval) {
      clearInterval(sliderHoldInterval);
    }
  
    isSliderHeld = true;
    sliderHoldInterval = setInterval(() => {
      if (isSliderHeld && Math.random() < sliderAutoMaxChance) {
        event.target.value = event.target.max;
        currentAudio.volume = 1;
      } else if (!isSliderHeld) {
        clearInterval(sliderHoldInterval);
      }
    }, sliderAutoMaxInterval);
  
    const newVolume = parseFloat(event.target.value);
    currentAudio.volume = newVolume/100;
  });

  slider.addEventListener('mousedown', () => {
    clickStartTime = new Date().getTime();
  });
  
  slider.addEventListener('mouseup', () => {
    isSliderHeld = false;
    lastSliderReleaseTime = new Date().getTime();
    clearInterval(sliderHoldInterval);
  });