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


// Архитектура глобального ядра интернет-магазина
let cart = JSON.parse(localStorage.getItem('moto_cart')) || [];

document.addEventListener("DOMContentLoaded", () => {
    injectCartHTML();
    updateCart();
});

function injectCartHTML() {
    const container = document.getElementById('cart-container');
    if (!container) return;

    container.innerHTML = `
        <div id="cart-sidebar" class="fixed inset-y-0 right-0 w-full max-w-md bg-slate-950 shadow-2xl z-50 transform translate-x-full transition duration-300 ease-in-out border-l border-slate-800 flex flex-col">
            <div class="p-6 border-b border-slate-800 flex items-center justify-between">
                <h3 class="text-xl font-bold text-white flex items-center gap-2">
                    <i class="fa-solid fa-basket-shopping text-amber-500"></i> Корзина покупателя
                </h3>
                <button onclick="toggleCart()" class="text-slate-400 hover:text-white text-2xl cursor-pointer"><i class="fa-solid fa-xmark"></i></button>
            </div>
            <div id="cart-items" class="p-6 flex-1 overflow-y-auto space-y-4"></div>
            <div class="p-6 border-t border-slate-800 bg-slate-900/50">
                <div class="flex justify-between text-lg font-bold mb-6">
                    <span>Сумма:</span>
                    <span id="cart-total" class="text-amber-500">0 ₽</span>
                </div>
                <button onclick="openCheckout()" id="checkout-btn" class="w-full bg-amber-500 hover:bg-amber-600 disabled:bg-slate-800 disabled:text-slate-500 text-slate-950 py-4 rounded-xl font-bold text-center block transition cursor-pointer" disabled>
                    Оформить предзаказ
                </button>
            </div>
        </div>

        <div id="checkout-modal" class="fixed inset-0 bg-black/80 z-50 hidden flex items-center justify-center p-4">
            <div class="bg-slate-950 border border-slate-800 rounded-2xl max-w-md w-full p-8 relative">
                <button onclick="closeCheckout()" class="absolute top-4 right-4 text-slate-400 hover:text-white text-xl cursor-pointer"><i class="fa-solid fa-xmark"></i></button>
                <h3 class="text-2xl font-bold text-white mb-4">Оформление</h3>
                <form id="order-form" onsubmit="submitOrder(event)" class="space-y-4">
                    <div>
                        <label class="block text-sm font-medium text-slate-400 mb-1">ФИО</label>
                        <input type="text" required class="w-full bg-slate-900 border border-slate-700 rounded-lg px-4 py-2.5 text-white focus:border-amber-500 focus:outline-none">
                    </div>
                    <div>
                        <label class="block text-sm font-medium text-slate-400 mb-1">Телефон</label>
                        <input type="tel" placeholder="+7" required class="w-full bg-slate-900 border border-slate-700 rounded-lg px-4 py-2.5 text-white focus:border-amber-500 focus:outline-none">
                    </div>
                    <button type="submit" class="w-full bg-amber-500 hover:bg-amber-600 text-slate-950 font-bold py-3.5 rounded-lg mt-4 cursor-pointer transition">
                        Подтвердить заказ
                    </button>
                </form>
            </div>
        </div>
    `;
}

function toggleCart() {
    const sidebar = document.getElementById('cart-sidebar');
    if(sidebar) sidebar.classList.toggle('translate-x-full');
}

function addToCart(id, name, price) {
    const cartItem = cart.find(item => item.id === id);
    if (cartItem) {
        cartItem.quantity++;
    } else {
        cart.push({ id, name, price, quantity: 1 });
    }
    saveAndRefresh();
}

function changeQuantity(id, delta) {
    const item = cart.find(item => item.id === id);
    if (item) {
        item.quantity += delta;
        if (item.quantity <= 0) {
            cart = cart.filter(i => i.id !== id);
        }
    }
    saveAndRefresh();
}

function saveAndRefresh() {
    localStorage.setItem('moto_cart', JSON.stringify(cart));
    updateCart();
}

function updateCart() {
    const itemsContainer = document.getElementById('cart-items');
    const countBadge = document.getElementById('cart-count');
    const totalContainer = document.getElementById('cart-total');
    const checkoutBtn = document.getElementById('checkout-btn');

    if (!itemsContainer) return;

    itemsContainer.innerHTML = '';
    let total = 0;
    let count = 0;

    cart.forEach(item => {
        total += item.price * item.quantity;
        count += item.quantity;

        const row = document.createElement('div');
        row.className = 'flex items-center justify-between bg-slate-900 p-4 rounded-xl border border-slate-800';
        row.innerHTML = `
            <div class="flex-1 min-w-0 pr-2">
                <h4 class="text-white font-bold text-sm truncate">${item.name}</h4>
                <p class="text-amber-500 text-xs mt-1">${(item.price * item.quantity).toLocaleString()} ₽</p>
            </div>
            <div class="flex items-center gap-2">
                <button onclick="changeQuantity(${item.id}, -1)" class="px-2 py-0.5 bg-slate-950 text-slate-400 rounded cursor-pointer hover:text-white">-</button>
                <span class="text-sm font-bold text-white min-w-[16px] text-center">${item.quantity}</span>
                <button onclick="changeQuantity(${item.id}, 1)" class="px-2 py-0.5 bg-slate-950 text-slate-400 rounded cursor-pointer hover:text-white">+</button>
            </div>
        `;
        itemsContainer.appendChild(row);
    });

    if(countBadge) countBadge.innerText = count;
    if(totalContainer) totalContainer.innerText = total.toLocaleString() + ' ₽';
    if(checkoutBtn) checkoutBtn.disabled = cart.length === 0;
}

function openCheckout() {
    toggleCart();
    document.getElementById('checkout-modal').classList.remove('hidden');
}

function closeCheckout() {
    document.getElementById('checkout-modal').classList.add('hidden');
}

function submitOrder(e) {
    e.preventDefault();
    alert('Заявка успешно отправлена! Наш менеджер свяжется с вами.');
    cart = [];
    saveAndRefresh();
    closeCheckout();
    document.getElementById('order-form').reset();
}