/**
 * Логика загрузки файла лицензии (FR-054).
 * Используется на странице /admin/license при отсутствии валидной лицензии.
 */
(function () {
    'use strict';

    var uploadZone = document.getElementById('uploadZone');
    var fileInput = document.getElementById('licenseFileInput');
    var statusMessage = document.getElementById('statusMessage');
    var uploadProgress = document.getElementById('uploadProgress');
    var hardwareIdEl = document.getElementById('hardwareId');

    // Загрузка hardware ID
    fetch('/api/v1/admin/licenses/hardware-id')
        .then(function (r) { return r.json(); })
        .then(function (data) {
            if (data.success && hardwareIdEl) {
                hardwareIdEl.textContent = data.hardware_id;
            }
        })
        .catch(function () {
            if (hardwareIdEl) hardwareIdEl.textContent = 'недоступен';
        });

    // Клик на зону загрузки
    if (uploadZone) {
        uploadZone.addEventListener('click', function () {
            fileInput.click();
        });

        // Drag & Drop
        uploadZone.addEventListener('dragover', function (e) {
            e.preventDefault();
            uploadZone.classList.add('dragover');
        });

        uploadZone.addEventListener('dragleave', function () {
            uploadZone.classList.remove('dragover');
        });

        uploadZone.addEventListener('drop', function (e) {
            e.preventDefault();
            uploadZone.classList.remove('dragover');
            var files = e.dataTransfer.files;
            if (files.length > 0) {
                handleFile(files[0]);
            }
        });
    }

    // Выбор файла через input
    if (fileInput) {
        fileInput.addEventListener('change', function () {
            if (fileInput.files.length > 0) {
                handleFile(fileInput.files[0]);
            }
        });
    }

    function showStatus(message, type) {
        if (!statusMessage) return;
        statusMessage.className = 'alert alert-' + type;
        statusMessage.innerHTML = message;
        statusMessage.classList.remove('d-none');
    }

    function handleFile(file) {
        // Показываем прогресс
        if (uploadProgress) uploadProgress.classList.remove('d-none');
        if (statusMessage) statusMessage.classList.add('d-none');

        uploadZone.classList.remove('success', 'error');

        var formData = new FormData();
        formData.append('license_file', file);

        fetch('/api/v1/admin/licenses/upload', {
            method: 'POST',
            body: formData
        })
            .then(function (response) { return response.json(); })
            .then(function (data) {
                if (uploadProgress) uploadProgress.classList.add('d-none');

                if (data.success) {
                    uploadZone.classList.add('success');
                    showStatus(
                        '<i class="bi bi-check-circle-fill"></i> ' +
                        data.message +
                        '<br><small>Перенаправление...</small>',
                        'success'
                    );
                    // Перенаправляем в админку через 2 секунды
                    setTimeout(function () {
                        window.location.href = '/admin/';
                    }, 2000);
                } else {
                    uploadZone.classList.add('error');
                    showStatus(
                        '<i class="bi bi-exclamation-triangle-fill"></i> ' +
                        (data.error || 'Неизвестная ошибка'),
                        'danger'
                    );
                }
            })
            .catch(function (err) {
                if (uploadProgress) uploadProgress.classList.add('d-none');
                uploadZone.classList.add('error');
                showStatus(
                    '<i class="bi bi-exclamation-triangle-fill"></i> Ошибка сети: ' + err.message,
                    'danger'
                );
            });
    }
})();
