const shuffle = (array) => {
    let currentIndex = array.length, temporaryValue, randomIndex;
    while (0 !== currentIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = array[currentIndex];
        array[currentIndex] = array[randomIndex];
        array[randomIndex] = temporaryValue;
    }
    return array;
};
const gameBoard = document.querySelector(".game-board");
const cardIds = Array.from({length: 8}, (_, i) => i).concat(Array.from({length: 8}, (_, i) => i));
let prevCard = null;
let cardsLeft = 16;
let attemptsCount = 0;
const attemptsElem = document.querySelector(".attempts");
const cardStates = {
  0: 'card',
  1: 'card flipped',
};
const createCards = () => {
    const shuffledIds = shuffle(cardIds);
    gameBoard.innerHTML = "";
    shuffledIds.forEach((id) => {
        const card = document.createElement("div");
        card.innerHTML = `<img src="img-${id}.jpg" alt="">`;
        card.setAttribute("data-id", id);
        card.className = cardStates[0];
        card.addEventListener("click", handleClick);
        gameBoard.appendChild(card);
    });
};
const handleClick = (e) => {
    const card = e.currentTarget;
    if (card === prevCard) return;
    attemptsCount++;
    attemptsElem.textContent = `${attemptsCount}`;
    card.className = cardStates[1];
    card.querySelector('img').style.display = 'block';
    if (!prevCard) {
        prevCard = card;
    } else {
        if (card.getAttribute('data-id') === prevCard.getAttribute('data-id')) {
            cardsLeft -= 2;
            if (cardsLeft === 0) {
                setTimeout(() => {
                    alert('¡Has ganado!');
                }, 500);
            }
            card.removeEventListener('click', handleClick);
            prevCard.removeEventListener('click', handleClick);
            prevCard = null;
        } else {
            card.style.pointerEvents = 'none';
            prevCard.style.pointerEvents = 'none';
            setTimeout(() => {
                card.className = cardStates[0];
                card.querySelector('img').style.display = 'none';
                prevCard.className = cardStates[0];
                prevCard.querySelector('img').style.display = 'none';
                card.style.pointerEvents = 'initial';
                prevCard.style.pointerEvents = 'initial';
                prevCard = null;
            }, 1000);
        }
    }
};
const restartGame = () => {
    prevCard = null;
    cardsLeft = 16;
    attemptsCount = 0;
    attemptsElem.textContent = "0";
    createCards();
};
createCards();