// Основные скрипты для системы

document.addEventListener('DOMContentLoaded', function() {
    // Инициализация всех интерактивных элементов
    
    // Подтверждение удаления
    const deleteButtons = document.querySelectorAll('a[onclick*="confirm"]');
    deleteButtons.forEach(button => {
        button.addEventListener('click', function(e) {
            if (!confirm('Вы уверены, что хотите выполнить это действие?')) {
                e.preventDefault();
            }
        });
    });

    // Динамическое обновление форм
    const dynamicForms = document.querySelectorAll('form[data-dynamic]');
    dynamicForms.forEach(form => {
        form.addEventListener('change', function() {
            this.submit();
        });
    });

    // Плавная прокрутка
    const smoothLinks = document.querySelectorAll('a[href^="#"]');
    smoothLinks.forEach(link => {
        link.addEventListener('click', function(e) {
            e.preventDefault();
            const targetId = this.getAttribute('href');
            if (targetId === '#') return;
            
            const targetElement = document.querySelector(targetId);
            if (targetElement) {
                targetElement.scrollIntoView({
                    behavior: 'smooth',
                    block: 'start'
                });
            }
        });
    });

    // Уведомления
    const alerts = document.querySelectorAll('.alert');
    alerts.forEach(alert => {
        setTimeout(() => {
            alert.style.opacity = '0';
            alert.style.transition = 'opacity 0.5s ease';
            setTimeout(() => alert.remove(), 500);
        }, 5000);
    });

    // Валидация форм
    const forms = document.querySelectorAll('form');
    forms.forEach(form => {
        form.addEventListener('submit', function(e) {
            const requiredFields = this.querySelectorAll('[required]');
            let isValid = true;

            requiredFields.forEach(field => {
                if (!field.value.trim()) {
                    isValid = false;
                    field.style.borderColor = '#e74c3c';
                    
                    // Создаем сообщение об ошибке
                    let errorMsg = field.parentNode.querySelector('.error-message');
                    if (!errorMsg) {
                        errorMsg = document.createElement('div');
                        errorMsg.className = 'error-message';
                        errorMsg.style.color = '#e74c3c';
                        errorMsg.style.fontSize = '0.8rem';
                        errorMsg.style.marginTop = '0.25rem';
                        field.parentNode.appendChild(errorMsg);
                    }
                    errorMsg.textContent = 'Это поле обязательно для заполнения';
                } else {
                    field.style.borderColor = '';
                    const errorMsg = field.parentNode.querySelector('.error-message');
                    if (errorMsg) errorMsg.remove();
                }
            });

            if (!isValid) {
                e.preventDefault();
                
                // Показываем общее уведомление
                const existingAlert = this.querySelector('.alert.error');
                if (!existingAlert) {
                    const alert = document.createElement('div');
                    alert.className = 'alert error';
                    alert.innerHTML = '❌ Пожалуйста, заполните все обязательные поля';
                    this.insertBefore(alert, this.firstChild);
                    
                    setTimeout(() => alert.remove(), 5000);
                }
            }
        });
    });

    // Динамическое обновление счетчиков
    function animateCounter(element, target, duration = 1000) {
        const start = 0;
        const increment = target / (duration / 16);
        let current = start;

        const timer = setInterval(() => {
            current += increment;
            if (current >= target) {
                current = target;
                clearInterval(timer);
            }
            element.textContent = Math.floor(current).toLocaleString();
        }, 16);
    }

    // Анимация статистики на дашборде
    const statNumbers = document.querySelectorAll('.stat-number');
    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const numberElement = entry.target;
                const targetValue = parseInt(numberElement.textContent.replace(/,/g, ''));
                if (!isNaN(targetValue)) {
                    animateCounter(numberElement, targetValue);
                }
                observer.unobserve(numberElement);
            }
        });
    }, { threshold: 0.5 });

    statNumbers.forEach(number => observer.observe(number));

    // Улучшенная обработка изображений
    const imageInputs = document.querySelectorAll('input[type="file"][accept*="image"]');
    imageInputs.forEach(input => {
        input.addEventListener('change', function(e) {
            const file = this.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = function(e) {
                    const preview = input.parentNode.querySelector('.image-preview');
                    if (!preview) {
                        const newPreview = document.createElement('div');
                        newPreview.className = 'image-preview';
                        newPreview.style.marginTop = '10px';
                        input.parentNode.appendChild(newPreview);
                    }
                    
                    const previewElement = input.parentNode.querySelector('.image-preview');
                    previewElement.innerHTML = `<img src="${e.target.result}" alt="Preview" style="max-width: 200px; border-radius: 10px;">`;
                };
                reader.readAsDataURL(file);
            }
        });
    });
});

// Функции для работы с API
const FuelSystem = {
    // Получение данных о технике
    async getVehicleInfo(vehicleId) {
        try {
            const response = await fetch(`api/vehicle_info.php?id=${vehicleId}`);
            return await response.json();
        } catch (error) {
            console.error('Ошибка получения данных о технике:', error);
            return null;
        }
    },

    // Обновление уровня топлива
    async updateFuelLevel(vehicleId, newLevel) {
        try {
            const response = await fetch('api/update_fuel.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    vehicle_id: vehicleId,
                    fuel_level: newLevel
                })
            });
            return await response.json();
        } catch (error) {
            console.error('Ошибка обновления уровня топлива:', error);
            return { success: false, error: 'Network error' };
        }
    },

    // Экспорт данных
    async exportData(type, filters = {}) {
        try {
            const queryString = new URLSearchParams(filters).toString();
            const response = await fetch(`api/export.php?type=${type}&${queryString}`);
            
            if (response.ok) {
                const blob = await response.blob();
                const url = window.URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.style.display = 'none';
                a.href = url;
                a.download = `fuel_report_${type}_${new Date().toISOString().split('T')[0]}.${type === 'excel' ? 'xlsx' : 'pdf'}`;
                document.body.appendChild(a);
                a.click();
                window.URL.revokeObjectURL(url);
                document.body.removeChild(a);
            }
        } catch (error) {
            console.error('Ошибка экспорта:', error);
            alert('Ошибка при экспорте данных');
        }
    }
};

// Утилиты для форматирования
const Formatter = {
    formatDate(date) {
        return new Date(date).toLocaleDateString('ru-RU');
    },

    formatDateTime(date) {
        return new Date(date).toLocaleString('ru-RU');
    },

    formatNumber(number, decimals = 2) {
        return parseFloat(number).toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    },

    formatCurrency(amount) {
        return new Intl.NumberFormat('ru-RU', {
            style: 'currency',
            currency: 'RUB'
        }).format(amount);
    }
};

// Глобальное использование
window.FuelSystem = FuelSystem;
window.Formatter = Formatter;





