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


// Длительность одного цикла сна - 90 минут
const CYCLE_LENGTH = 90;
// Время на засыпание - 15 минут
const FALL_ASLEEP_TIME = 15;

// Получаем элементы со страницы
const tabSleepNow = document.getElementById('tab-sleep-now');
const tabWakeUp = document.getElementById('tab-wake-up');
const panelSleepNow = document.getElementById('panel-sleep-now');
const panelWakeUp = document.getElementById('panel-wake-up');

const btnCalcNow = document.getElementById('btn-calc-now');
const btnCalcWake = document.getElementById('btn-calc-wake');
const wakeTimeInput = document.getElementById('wake-time');

const resultsContainer = document.getElementById('results-container');
const resultsTitle = document.getElementById('results-title');
const timesList = document.getElementById('times-list');

// --- ЛОГИКА ПЕРЕКЛЮЧЕНИЯ ВКЛАДОК ---

function switchTab(activeTab, inactiveTab, activePanel, inactivePanel) {
    activeTab.classList.add('active');
    inactiveTab.classList.remove('active');
    
    activePanel.classList.add('active');
    inactivePanel.classList.remove('active');
    
    resultsContainer.classList.add('hidden');
}

tabSleepNow.addEventListener('click', () => {
    switchTab(tabSleepNow, tabWakeUp, panelSleepNow, panelWakeUp);
});

tabWakeUp.addEventListener('click', () => {
    switchTab(tabWakeUp, tabSleepNow, panelWakeUp, panelSleepNow);
});

// --- МАТЕМАТИКА И ВЫВОД РЕЗУЛЬТАТОВ ---

// Функция для форматирования времени (например, из 7:5 в 07:05)
function formatTime(date) {
    let hours = date.getHours().toString().padStart(2, '0');
    let minutes = date.getMinutes().toString().padStart(2, '0');
    return `${hours}:${minutes}`;
}

// Функция отрисовки списка времени
function renderTimes(times, isWakeUpMode) {
    timesList.innerHTML = ''; 
    
    times.forEach(item => {
        const li = document.createElement('li');
        li.className = 'time-item';
        
        // Зеленый цвет для оптимальных 5-6 циклов
        if (item.cycles === 5 || item.cycles === 6) {
            li.classList.add('optimal');
        }

        let cycleText = `(${item.cycles} циклов сна)`;

        li.innerHTML = `
            <span class="time-val">${formatTime(item.time)}</span>
            <span class="time-cycles">${cycleText}</span>
        `;
        timesList.appendChild(li);
    });

    resultsContainer.classList.remove('hidden');
}

// Сценарий 1: Лечь прямо сейчас
btnCalcNow.addEventListener('click', () => {
    let now = new Date();
    // Добавляем 15 минут
    now.setMinutes(now.getMinutes() + FALL_ASLEEP_TIME);
    
    let sleepTimes = [];
    for (let i = 6; i >= 1; i--) {
        let cycleTime = new Date(now.getTime() + (i * CYCLE_LENGTH * 60000));
        sleepTimes.push({ time: cycleTime, cycles: i });
    }

    resultsTitle.textContent = "Вам нужно проснуться в:";
    renderTimes(sleepTimes, true);
});

// Сценарий 2: Проснуться в заданное время
btnCalcWake.addEventListener('click', () => {
    if (!wakeTimeInput.value) return;

    let [hours, minutes] = wakeTimeInput.value.split(':');
    
    let wakeDate = new Date();
    wakeDate.setHours(hours);
    wakeDate.setMinutes(minutes);

    let sleepTimes = [];
    
    for (let i = 6; i >= 1; i--) {
        let sleepTime = new Date(wakeDate.getTime() - (i * CYCLE_LENGTH * 60000) - (FALL_ASLEEP_TIME * 60000));
        sleepTimes.push({ time: sleepTime, cycles: i });
    }

    resultsTitle.textContent = "Вам нужно лечь спать в:";
    renderTimes(sleepTimes, false);
});