Загрузка данных


const taskInput = document.getElementById("task-input");
const addBtn = document.getElementById("add-btn");
const taskList = document.getElementById("task-list");
const taskCounter = document.getElementById("task-counter");
const emptyState = document.getElementById("empty-state");
const clearCompletedBtn = document.getElementById("clear-completed");

// Загружаем сохраненные задачи из памяти браузера (или создаем пустой массив)
let tasks = JSON.parse(localStorage.getItem("tasks")) || [];

// Сохранение в localStorage и обновление экрана
function saveAndRender() {
    localStorage.setItem("tasks", JSON.stringify(tasks));
    renderTasks();
}

// Отрисовка списка задач
function renderTasks() {
    taskList.innerHTML = "";

    tasks.forEach((task, index) => {
        const li = document.createElement("li");
        li.className = `task-item ${task.completed ? "completed" : ""}`;

        // Левая часть: кружок + текст
        const contentDiv = document.createElement("div");
        contentDiv.className = "task-content";

        const checkbox = document.createElement("div");
        checkbox.className = "checkbox";

        const span = document.createElement("span");
        span.textContent = task.text;

        contentDiv.appendChild(checkbox);
        contentDiv.appendChild(span);

        // Клик по задаче отмечает её выполненной
        li.onclick = () => toggleTask(index);

        // Кнопка удаления
        const deleteBtn = document.createElement("button");
        deleteBtn.textContent = "✕";
        deleteBtn.className = "delete-btn";
        deleteBtn.onclick = (e) => {
            e.stopPropagation(); // чтобы не срабатывало зачеркивание при удалении
            deleteTask(index);
        };

        li.appendChild(contentDiv);
        li.appendChild(deleteBtn);
        taskList.appendChild(li);
    });

    updateUI();
}

// Обновление счётчика и пустых состояний
function updateUI() {
    const activeCount = tasks.filter(t => !t.completed).length;
    const completedCount = tasks.length - activeCount;

    taskCounter.textContent = `${activeCount} активных`;

    // Показываем или прячем надпись "Список задач пуст"
    emptyState.classList.toggle("hidden", tasks.length > 0);
    
    // Показываем кнопку "Удалить выполненные", если есть хотя бы одна завершенная
    clearCompletedBtn.classList.toggle("hidden", completedCount === 0);
}

// Добавление новой задачи
function addTask() {
    const text = taskInput.value.trim();

    if (text === "") {
        // Вместо скучного alert трясем поле ввода и подсвечиваем красным
        taskInput.classList.add("error");
        setTimeout(() => taskInput.classList.remove("error"), 400);
        taskInput.focus();
        return;
    }

    tasks.push({ text: text, completed: false });
    taskInput.value = "";
    taskInput.focus();
    saveAndRender();
}

// Переключение статуса задачи (выполнена / не выполнена)
function toggleTask(index) {
    tasks[index].completed = !tasks[index].completed;
    saveAndRender();
}

// Удаление одной задачи
function deleteTask(index) {
    tasks.splice(index, 1);
    saveAndRender();
}

// Очистка всех выполненных задач
clearCompletedBtn.onclick = () => {
    tasks = tasks.filter(t => !t.completed);
    saveAndRender();
};

// События
addBtn.onclick = addTask;

taskInput.addEventListener("keydown", (e) => {
    if (e.key === "Enter") {
        addTask();
    }
});

// Запускаем отрисовку при открытии страницы
renderTasks();