import { Alpine } from "./alpine"; import { showToast } from "./toast"; async function refreshQueue(): Promise { const token = localStorage.getItem("token"); if (!token) return; try { const response = await fetch("/api/queue/all", { headers: { Authorization: `Bearer ${token}` }, }); if (response.ok) { const data = await response.json(); renderQueueItems(data.items || []); } } catch (error) { console.error("Failed to refresh queue:", error); } } async function processPendingItems(): Promise { const token = localStorage.getItem("token"); if (!token) return; try { const response = await fetch("/api/queue/process", { method: "POST", headers: { Authorization: `Bearer ${token}` }, }); if (response.ok) { showToast("Processing queue items", "success"); refreshQueue(); } } catch (error) { console.error("Failed to process queue:", error); showToast("Failed to process queue", "error"); } } async function clearFailedItems(): Promise { const token = localStorage.getItem("token"); if (!token) return; if (!confirm("Are you sure you want to clear all failed items?")) return; try { const response = await fetch("/api/queue/failed", { method: "DELETE", headers: { Authorization: `Bearer ${token}` }, }); if (response.ok) { showToast("Failed items cleared", "success"); refreshQueue(); } } catch (error) { console.error("Failed to clear failed items:", error); showToast("Failed to clear items", "error"); } } async function clearAllItems(): Promise { const token = localStorage.getItem("token"); if (!token) return; if (!confirm("Are you sure you want to clear all queue items?")) return; try { const response = await fetch("/api/queue/all", { method: "DELETE", headers: { Authorization: `Bearer ${token}` }, }); if (response.ok) { showToast("Queue cleared", "success"); refreshQueue(); } } catch (error) { console.error("Failed to clear queue:", error); showToast("Failed to clear queue", "error"); } } async function retryQueueItem(itemId: string): Promise { const token = localStorage.getItem("token"); if (!token) return; try { const response = await fetch(`/api/queue/items/${itemId}/retry`, { method: "POST", headers: { Authorization: `Bearer ${token}` }, }); if (response.ok) { showToast("Item queued for retry", "success"); refreshQueue(); } } catch (error) { console.error("Failed to retry item:", error); showToast("Failed to retry item", "error"); } } async function deleteQueueItem(itemId: string): Promise { const token = localStorage.getItem("token"); if (!token) return; try { const response = await fetch(`/api/queue/items/${itemId}`, { method: "DELETE", headers: { Authorization: `Bearer ${token}` }, }); if (response.ok) { showToast("Item deleted", "success"); refreshQueue(); } } catch (error) { console.error("Failed to delete item:", error); showToast("Failed to delete item", "error"); } } function renderQueueItems(items: QueueItemResponse[]): void { const container = document.getElementById("queue-items"); if (!container) return; if (items.length === 0) { container.innerHTML = '

Queue is empty

'; return; } container.innerHTML = items .map( (item) => `

${item.media_title || "Unknown"}

${item.status} - ${item.sync_type}

Attempts: ${item.attempts}/${item.max_attempts}

${item.status === "failed" ? `` : ""}
${item.error_message ? `

${item.error_message}

` : ""}
`, ) .join(""); } function showQueueItemModal(itemId: string): void { const modal = document.getElementById("queue-item-modal"); const detailsContainer = document.getElementById("queue-item-details"); if (modal && detailsContainer) { // TODO: Fetch and display item details detailsContainer.innerHTML = "

Loading item details...

"; modal.classList.remove("hidden"); } } function hideQueueItemModal(): void { const modal = document.getElementById("queue-item-modal"); if (modal) { modal.classList.add("hidden"); } } function filterQueue(status: string): void { const filterValue = status || "all"; // TODO: Implement filtering logic console.log("Filter queue by:", filterValue); } export { clearAllItems, clearFailedItems, deleteQueueItem, processPendingItems, refreshQueue, retryQueueItem, showQueueItemModal, hideQueueItemModal, filterQueue, }; Alpine.data("queue", () => ({ clearAllItems, clearFailedItems, deleteQueueItem, processPendingItems, refreshQueue, retryQueueItem, showQueueItemModal, hideQueueItemModal, filterQueue, }));