/** * main.js — Главная точка входа клиентского приложения «Кадр» v2 */ import { checkAuth, submitLogin, logout } from "./auth.js"; import { startHealthPolling } from "./health.js"; import { initUpload } from "./upload.js"; import { initReference } from "./reference.js"; import { initSuggest } from "./suggest.js"; import { initJobsEvents, runJob } from "./jobs.js"; import { refreshHistory } from "./history-tree.js"; import { subscribe, getState } from "./state.js"; function setupButtonsAndInputs() { const loginForm = document.querySelector("#login-form"); const logoutBtn = document.querySelector("#logout-button"); const editBtn = document.querySelector("#edit-button"); const upscaleBtn = document.querySelector("#upscale-button"); const promptInput = document.querySelector("#prompt"); const promptCounter = document.querySelector("#prompt-counter"); if (loginForm) { loginForm.addEventListener("submit", submitLogin); } if (logoutBtn) { logoutBtn.addEventListener("click", logout); } if (promptInput) { promptInput.addEventListener("input", () => { const val = promptInput.value; if (promptCounter) { promptCounter.textContent = `${val.length} / 1000`; } const state = getState(); if (editBtn) { editBtn.disabled = !state.currentVersionId || !val.trim() || state.isBusy; } }); } if (editBtn) { editBtn.addEventListener("click", () => runJob("edit")); } if (upscaleBtn) { upscaleBtn.addEventListener("click", () => runJob("upscale")); } // Subscribe to state changes to update button states subscribe((state, changeKey) => { if (changeKey === "isBusy" || changeKey === "currentVersionId") { const hasVersion = Boolean(state.currentVersionId); const promptVal = promptInput?.value?.trim() || ""; if (upscaleBtn) upscaleBtn.disabled = !hasVersion || state.isBusy; if (editBtn) editBtn.disabled = !hasVersion || !promptVal || state.isBusy; } }); } async function init() { setupButtonsAndInputs(); initUpload(); initReference(); initSuggest(); startHealthPolling(); const authenticated = await checkAuth(); if (authenticated) { initJobsEvents(); await refreshHistory(true); } } document.addEventListener("DOMContentLoaded", init);