document.addEventListener('DOMContentLoaded', function() { // Mock product data const mockProducts = [ {"asin":"B08PP5MSVB","title":"Runner Pro Shoe - Blue","image":"https://via.placeholder.com/64","metrics":{"sales_30":1423,"cvr_30":0.18,"clicks_30":921}}, {"asin":"B09XYZ1234","title":"Trail Grip Shoe - Black","image":"https://via.placeholder.com/64","metrics":{"sales_30":543,"cvr_30":0.12,"clicks_30":320}}, {"asin":"B07ABC9876","title":"Daily Comfort Sneaker","image":"https://via.placeholder.com/64","metrics":{"sales_30":12,"cvr_30":0.02,"clicks_30":4}}, {"asin":"B0A1B2C3D4","title":"Performance Running Shorts","image":"https://via.placeholder.com/64","metrics":{"sales_30":876,"cvr_30":0.15,"clicks_30":421}}, {"asin":"B0D5E6F7G8","title":"Athletic Compression Socks","image":"https://via.placeholder.com/64","metrics":{"sales_30":321,"cvr_30":0.08,"clicks_30":154}}, {"asin":"B0H9I8J7K6","title":"Yoga Mat - Extra Thick","image":"https://via.placeholder.com/64","metrics":{"sales_30":654,"cvr_30":0.22,"clicks_30":298}}, {"asin":"B0L1M2N3O4","title":"Adjustable Dumbbell Set","image":"https://via.placeholder.com/64","metrics":{"sales_30":432,"cvr_30":0.14,"clicks_30":187}}, {"asin":"B0P5Q6R7S8","title":"Foam Roller - High Density","image":"https://via.placeholder.com/64","metrics":{"sales_30":189,"cvr_30":0.07,"clicks_30":92}}, {"asin":"B0T9U8V7W6","title":"Resistance Bands Set","image":"https://via.placeholder.com/64","metrics":{"sales_30":567,"cvr_30":0.19,"clicks_30":301}}, {"asin":"B0X1Y2Z3A4","title":"Jump Rope - Weighted","image":"https://via.placeholder.com/64","metrics":{"sales_30":234,"cvr_30":0.11,"clicks_30":123}} ]; // DOM Elements const selectContextBtn = document.getElementById('selectContextBtn'); const contextPanel = document.getElementById('contextPanel'); const parseBtn = document.getElementById('parseBtn'); const asinInput = document.getElementById('asinInput'); const previewSection = document.getElementById('previewSection'); const previewGrid = document.getElementById('previewGrid'); const totalValidCount = document.getElementById('totalValidCount'); const selectAllBtn = document.getElementById('selectAllBtn'); const deselectAllBtn = document.getElementById('deselectAllBtn'); const selectedCountText = document.getElementById('selectedCountText'); const applySelectionBtn = document.getElementById('applySelectionBtn'); const saveContextCheckbox = document.getElementById('saveContextCheckbox'); const contextNameInput = document.getElementById('contextNameInput'); const tabButtons = document.querySelectorAll('.tab-btn'); const tabContents = document.querySelectorAll('.tab-content'); const toast = document.getElementById('toast'); const confirmModal = document.getElementById('confirmModal'); const modalCount = document.getElementById('modalCount'); const confirmInput = document.getElementById('confirmInput'); const cancelConfirmBtn = document.getElementById('cancelConfirmBtn'); const proceedConfirmBtn = document.getElementById('proceedConfirmBtn'); // State let selectedProducts = []; let currentTab = 'manual'; // Event Listeners selectContextBtn.addEventListener('click', toggleContextPanel); parseBtn.addEventListener('click', parseAsins); selectAllBtn.addEventListener('click', selectAllProducts); deselectAllBtn.addEventListener('click', deselectAllProducts); applySelectionBtn.addEventListener('click', applySelection); saveContextCheckbox.addEventListener('change', toggleSaveContextInput); tabButtons.forEach(button => { button.addEventListener('click', () => switchTab(button.dataset.tab)); }); confirmInput.addEventListener('input', checkConfirmation); cancelConfirmBtn.addEventListener('click', closeConfirmModal); proceedConfirmBtn.addEventListener('click', confirmAndApply); // Functions function toggleContextPanel() { contextPanel.classList.toggle('hidden'); if (!contextPanel.classList.contains('hidden')) { // Focus first input when panel opens if (currentTab === 'manual') { asinInput.focus(); } } } function switchTab(tabName) { currentTab = tabName; // Update tab button states tabButtons.forEach(button => { if (button.dataset.tab === tabName) { button.classList.add('active-tab'); } else { button.classList.remove('active-tab'); } }); // Show/hide tab contents tabContents.forEach(content => { if (content.id === `${tabName}Tab`) { content.classList.remove('hidden'); } else { content.classList.add('hidden'); } }); } function parseAsins() { const asinsText = asinInput.value.trim(); if (!asinsText) { return; } // Simulate API call setTimeout(() => { // Validate ASINs (mock) const validProducts = mockProducts.slice(0, 10); // Just show first 10 for demo const totalCount = 142; // Mock total count // Update UI renderProductPreview(validProducts); totalValidCount.textContent = totalCount; previewSection.classList.remove('hidden'); // Update selected count updateSelectedCount(); }, 300); } function renderProductPreview(products) { previewGrid.innerHTML = ''; products.forEach(product => { const productCard = document.createElement('div'); productCard.className = 'product-card bg-[#1E1F23] rounded-md p-3 cursor-pointer'; productCard.dataset.asin = product.asin; productCard.innerHTML = `