// static/system/update.js

function _setNav(enabled) {
	document.querySelectorAll('.nav-btn').forEach(b => { b.disabled = !enabled; });
}

window.renderUpdate = function(container) {
	container.innerHTML = `
		<div class="update-page">
			<h2>Обновление ПО</h2>
			<div class="update-info">
				<p>Текущая версия: <b id="current-version">Загрузка...</b></p>
				<p>Доступная версия: <b id="available-version">—</b></p>
				<div id="update-status"></div>
			</div>
			<div id="action-buttons"></div>
			<div id="update-loader" class="loading" style="display:none;">
				<div class="spinner"></div>
				<p>Идет обновление...</p>
				<p>Не закрывайте страницу</p>
			</div>
		</div>`;
	checkForUpdate();
};

async function checkForUpdate() {
	const buttonsDiv = document.getElementById('action-buttons');
	const loader = document.getElementById('update-loader');
	const statusDiv = document.getElementById('update-status');
	
	loader.style.display = 'none';
	buttonsDiv.innerHTML = '<button class="update-btn" disabled>Проверка...</button>';
	statusDiv.innerHTML = '';
	
	try {
		const res = await fetch('/api/ota/check?t=' + Date.now());
		const result = await res.json();
		
		if (result.success) {
			const current = result.current_version || '0.0.0';
			const available = result.version || current;
			
			document.getElementById('current-version').textContent = `v${current}`;
			document.getElementById('available-version').textContent = `v${available}`;
			
			statusDiv.innerHTML = `<p style="color: var(--accent); font-size: 1.1em;">${current === available ? '✓ Версия актуальна' : '✓ Доступно обновление'}</p>`;
			
			buttonsDiv.innerHTML = `<button class="update-btn" id="apply-update-btn">Установить обновление</button>`;
			document.getElementById('apply-update-btn').addEventListener('click', applyUpdate);
		} else {
			statusDiv.innerHTML = `<p style="color: red;">Ошибка: ${result.error}</p>`;
		}
	} catch (e) {
		statusDiv.innerHTML = `<p style="color: red;">Ошибка сети</p>`;
	}
}

// <<< ИЗМЕНЕНО: таймаут берётся из общего window.AquaScape.timeouts.update (90 сек)
async function applyUpdate() {
	if (!confirm('Начать обновление?\nУстройство перезагрузится.')) return;
	
	sessionStorage.setItem('ota_update_started', 'true');
	
	const loader = document.getElementById('update-loader');
	const statusDiv = document.getElementById('update-status');
	const buttonsDiv = document.getElementById('action-buttons');
	
	buttonsDiv.innerHTML = '';
	loader.style.display = 'flex';
	_setNav(false);
	
	try { await fetch('/api/ota/update?t=' + Date.now()); } catch (e) {}
	
	let timeLeft = ((window.AquaScape || {}).timeouts || {}).update || 90;
	statusDiv.innerHTML = `<p style="color: var(--accent);">Обновление... Осталось: <b>${timeLeft}</b> сек</p>`;
	
	const timer = setInterval(() => {
		timeLeft--;
		const el = statusDiv.querySelector('b');
		if (el) el.textContent = timeLeft;
		if (timeLeft <= 0) clearInterval(timer);
	}, 1000);
	
	let attempts = 0;
	const maxAttempts = 40;
	let done = false;
	
	const check = async () => {
		if (done) return;
		attempts++;
		
		try {
			const res = await fetch(`/api/ota/file-status?t=${Date.now()}`, {cache: 'no-cache'});
			if (res.ok) {
				const data = await res.json();
				
				if (['completed', 'error', 'idle'].includes(data.status) || attempts >= maxAttempts) {
					done = true;
					clearInterval(timer);
					_setNav(true);
					
					const updateStarted = sessionStorage.getItem('ota_update_started') === 'true';
					const isSuccess = data.status === 'completed' || (data.status === 'idle' && updateStarted);
					
					let errorMessage = '';
					if (data.status === 'error') {
						errorMessage = data.message || 'Неизвестная ошибка';
					} else if (!isSuccess && attempts >= maxAttempts) {
						errorMessage = 'Превышено время ожидания';
					}
					
					if (isSuccess) {
						sessionStorage.removeItem('ota_update_started');
						sessionStorage.setItem('force_reload_after_ota', 'true');
					}
					
					statusDiv.innerHTML = `
						<p style="color: ${isSuccess ? 'green' : 'red'}; font-size: 1.2em; font-weight: bold; margin: 20px 0;">
							${isSuccess ? '✓ Обновление завершено' : `⚠ Процесс завершен: ${errorMessage}`}
						</p>
						<button class="update-btn" onclick="window.location.href='/?t=' + Date.now()" style="margin-top: 15px;">
							Перезагрузить страницу
						</button>
					`;
					loader.style.display = 'none';
					return;
				}
			}
		} catch (e) {}
		
		if (!done) setTimeout(check, 2000);
	};
	
	setTimeout(() => { check(); }, 25000);
}