document.addEventListener('DOMContentLoaded', function() {
      
    const Joomla = window.Joomla || {};
    const strings = Joomla.Text ? {
        noDocuments: Joomla.Text._('EDOCMAN_NO_DOCUMENTS', 'No documents added to download list'),
        documentAdded: Joomla.Text._('EDOCMAN_DOCUMENT_ADDED', 'Document added to download list'),
        documentRemoved: Joomla.Text._('EDOCMAN_DOCUMENT_REMOVED', 'Document removed from download list'),
        allDocumentsCleared: Joomla.Text._('EDOCMAN_ALL_DOCUMENTS_CLEARED', 'All documents cleared from download list'),
        downloading: Joomla.Text._('EDOCMAN_DOWNLOADING', 'Downloading'),
        downloadStarted: Joomla.Text._('EDOCMAN_DOWNLOAD_STARTED', 'Download started'),
        downloadError: Joomla.Text._('EDOCMAN_DOWNLOAD_ERROR', 'Download error'),
        edocmannotice: Joomla.Text._('EDOCMAN_NOTICE','Notice'),
        documentexists: Joomla.Text._('EDOCMAN_THE_DOCUMENT_IS_ALREADY_IN_MASS_DOWNLOAD_LIST','This document is already in the download list'),
        documentaddednotice: Joomla.Text._('EDOCMAN_DOCUMENT_ADDED_NOTICE', 'Document added'),
        documentremovednotice: Joomla.Text._('EDOCMAN_REMOVE', 'Remove'),
        documentremoveallnotice: Joomla.Text._('EDOCMAN_CLEAR_ALL', 'Clear All'),
        documentpreparedownload: Joomla.Text._('EDOCMAN_PREPARING_TO_DOWNLOAD_ALL_DOCUMENTS', 'Preparing to download all documents'),
        documentstartdownloadnotice: Joomla.Text._('EDOCMAN_DOWNLOAD_STARTING', 'Download starting'),
        documentstartdownload: Joomla.Text._('EDOCMAN_YOUR_BROWSER_WILL_DISPLAY_DOWNLOAD_DIALOG', 'Your browser will display a download dialog'),
        documentExpired: Joomla.Text._('EDOCMAN_DOCUMENT_EXPIRED', 'Some documents have expired and were removed from the list')
    } : {
        noDocuments: 'No documents added to download list',
        documentAdded: 'Document added to download list',
        documentRemoved: 'Document removed from download list',
        allDocumentsCleared: 'All documents cleared from download list',
        downloading: 'Downloading',
        downloadStarted: 'Download started',
        downloadError: 'Download error',
        edocmannotice: 'Notice',
        documentexists: 'This document is already in the download list',
        documentaddednotice: 'Document added',
        documentremovednotice: 'Remove',
        documentremoveallnotice: 'Clear All',
        documentpreparedownload: 'Preparing to download all documents',
        documentstartdownloadnotice: 'Download starting',
        documentstartdownload: 'Your browser will display a download dialog',
        documentExpired: 'Some documents have expired and were removed from the list'
    };

    // Thêm prefix cho localStorage để đảm bảo không xung đột với các trang khác
    const STORAGE_PREFIX = 'edocman_mass_download_';
    // Thời gian hết hạn: 2 giờ (tính bằng milliseconds)
    const EXPIRY_TIME = 2 * 60 * 60 * 1000;

    const massDownloadSystem = document.getElementById('mass-download-system');
    const toggleBtn = document.getElementById('mdp-toggle-btn');
    const expandBtn = document.getElementById('mdp-expand-btn');
    const collapseBtn = document.getElementById('mdp-collapse-btn');
    const minimizeBtn = document.getElementById('mdp-minimize-btn');
    const downloadBtn = document.getElementById('mdp-download-btn');
    const clearBtn = document.getElementById('mdp-clear-btn');
    const panelDownloadBtn = document.getElementById('mdp-panel-download-btn');
    const panelClearBtn = document.getElementById('mdp-panel-clear-btn');
    const fileList = document.getElementById('mdp-file-list');
    const countBadge = document.getElementById('mdp-count-badge');
    const barCount = document.getElementById('mdp-bar-count');
    const panelCount = document.getElementById('mdp-panel-count');
    const toastContainer = document.getElementById('mdp-toast-container');
    
    let massDownloadItems = [];
    let currentLevel = 1;
    let inactivityTimer;
    const autoMinimizeDelay = 30000;
    
    // Khởi tạo
    init();
    
    /**
     * Khởi tạo hệ thống
     */
    function init() {
        // Tải dữ liệu đã lưu và kiểm tra hạn sử dụng
        loadSavedItems();
        
        // Đặt cấp độ ban đầu
        const savedLevel = loadSavedLevel();
        if (savedLevel && massDownloadItems.length > 0) {
            setLevel(parseInt(savedLevel));
        } else if (massDownloadItems.length > 0) {
            setLevel(2);
        } else {
            setLevel(1);
        }
        
        // Event listeners
        toggleBtn.addEventListener('click', function() {
            if (currentLevel === 2) {
                setLevel(1);
            } else {
                setLevel(2);
            }
        });
        
        expandBtn.addEventListener('click', function() {
            setLevel(3);
        });
        
        collapseBtn.addEventListener('click', function() {
            setLevel(2);
        });
        
        minimizeBtn.addEventListener('click', function() {
            setLevel(1);
        });
        
        downloadBtn.addEventListener('click', downloadAllFiles);
        clearBtn.addEventListener('click', clearAll);
        panelDownloadBtn.addEventListener('click', downloadAllFiles);
        panelClearBtn.addEventListener('click', clearAll);
        
        document.querySelectorAll('.mass-download-btn').forEach(button => {
            button.addEventListener('click', function() {
                const id = this.dataset.id;
                const name = this.dataset.name;
                const type = this.dataset.type;
                const size = this.dataset.size;
                
                addItem({
                    id: id,
                    name: name,
                    type: type,
                    size: size
                });
            });
        });
        
        updateUI();
        
        // Thiết lập kiểm tra định kỳ cho các tài liệu hết hạn
        setInterval(checkExpiredItems, 60000); // Kiểm tra mỗi phút
    }
    
    /**
     * Thiết lập cấp độ hiển thị
     */
    function setLevel(level) {
        currentLevel = level;
        massDownloadSystem.className = `mass-download-system level-${level}`;
        
        // Lưu cấp độ hiện tại
        saveLevel(level);
        
        // Thiết lập timer tự động thu gọn khi ở cấp độ 2
        if (level === 2) {
            setupAutoMinimize();
        } else {
            clearTimeout(inactivityTimer);
        }
    }
    
    /**
     * Thiết lập timer tự động thu gọn
     */
    function setupAutoMinimize() {
        // Chỉ thiết lập khi đang ở cấp độ 2 và có tùy chọn tự động thu gọn
        if (currentLevel === 2) {
            clearTimeout(inactivityTimer);
            inactivityTimer = setTimeout(() => {
                setLevel(1);
            }, autoMinimizeDelay);
        }
    }
    
    /**
     * Đặt lại timer khi có hoạt động
     */
    function resetAutoMinimize() {
        clearTimeout(inactivityTimer);
        setupAutoMinimize();
    }
    
    /**
     * Lưu cấp độ hiển thị vào localStorage với prefix
     */
    function saveLevel(level) {
        localStorage.setItem(`${STORAGE_PREFIX}level`, level);
    }
    
    /**
     * Lấy cấp độ hiển thị từ localStorage với prefix
     */
    function loadSavedLevel() {
        return localStorage.getItem(`${STORAGE_PREFIX}level`);
    }
    
    /**
     * Thêm một tài liệu vào danh sách tải xuống với thời hạn sống
     */
    function addItem(item) {
        const existingItem = massDownloadItems.find(i => i.id === item.id);
        if (existingItem) {
            showToast(strings.edocmannotice, strings.documentexists, 'info');
            return;
        }
       
        const now = new Date();
        const enhancedItem = {
            ...item,
            expiry: now.getTime() + EXPIRY_TIME
        };
        
        // Thêm vào danh sách
        massDownloadItems.push(enhancedItem);
        
        // Lưu danh sách
        saveItems();
        
        // Cập nhật UI
        updateUI();
        
        // Hiển thị thông báo
        showToast(strings.documentaddednotice, strings.documentAdded, 'success');
        
        // Chuyển sang cấp độ 2 nếu đang ở cấp độ 1
        if (currentLevel === 1) {
            setLevel(2);
        }
        
        // Làm nổi bật badge
        animateBadge();
    }
    
    /**
     * Xóa một tài liệu khỏi danh sách tải xuống
     */
    function removeItem(id) {
        const index = massDownloadItems.findIndex(item => item.id === id);
        if (index !== -1) {
            massDownloadItems.splice(index, 1);
            saveItems();
            updateUI();
            showToast(strings.documentremovednotice, strings.documentRemoved, 'info');
            
            if (massDownloadItems.length === 0) {
                setLevel(1);
            }
        }
    }
    
    /**
     * Xóa tất cả tài liệu
     */
    function clearAll() {
        if (massDownloadItems.length > 0) {
            massDownloadItems = [];
            saveItems();
            updateUI();
            showToast(strings.documentremoveallnotice, strings.allDocumentsCleared, 'info');
            
            // Tự động chuyển về cấp 1 khi không còn tài liệu nào
            setLevel(1);
        }
    }
    
    /**
     * Tải xuống tất cả tài liệu
     */
    function downloadAllFiles() {
        if (massDownloadItems.length === 0) {
            return;
        }
        
        // Kiểm tra và xóa các item hết hạn trước khi tải xuống
        checkExpiredItems();
        
        if (massDownloadItems.length === 0) {
            return;
        }
        
        // Hiển thị thông báo
        showToast(strings.downloading, strings.documentpreparedownload, 'info');
        
        // Lấy danh sách ID
        const ids = massDownloadItems.map(item => item.id).join(',');
        
        // Tạo URL tải xuống
        const downloadUrl = `${live_site}index.php?option=com_edocman&task=document.processMassDownload&ids=${ids}&${Joomla.getOptions('csrf.token', '')}=1`;
        // Tạo iframe ẩn để tải xuống
        const iframe = document.createElement('iframe');
        iframe.style.display = 'none';
        iframe.src = downloadUrl;
        document.body.appendChild(iframe);
        
        // Xóa iframe sau khi tải xuống
        setTimeout(() => {
            document.body.removeChild(iframe);
            showToast(strings.documentstartdownloadnotice, strings.documentstartdownload, 'success');
        }, 2000);
    }
    
    /**
     * Kiểm tra và xóa các tài liệu đã hết hạn
     * Trả về true nếu có bất kỳ tài liệu nào bị xóa
     */
    function checkExpiredItems() {
        const now = new Date().getTime();
        const initialCount = massDownloadItems.length;
        
        // Lọc ra các tài liệu chưa hết hạn
        massDownloadItems = massDownloadItems.filter(item => {
            return item.expiry && item.expiry > now;
        });
        
        // Nếu có tài liệu bị xóa do hết hạn
        if (massDownloadItems.length < initialCount) {
            saveItems();
            updateUI();
            
            // Hiển thị thông báo nếu có tài liệu hết hạn
            showToast(strings.edocmannotice, strings.documentExpired, 'warning');
            
            // Nếu không còn tài liệu nào, chuyển về cấp độ 1
            if (massDownloadItems.length === 0) {
                setLevel(1);
            }
            
            return true;
        }
        
        return false;
    }
    
    /**
     * Lưu danh sách tài liệu vào localStorage với prefix và mã hóa đơn giản
     */
    function saveItems() {
        try {
            const serializedData = JSON.stringify(massDownloadItems);
            localStorage.setItem(`${STORAGE_PREFIX}items`, serializedData);
        } catch (e) {
            console.error('Error saving mass download items:', e);
        }
    }
    
    /**
     * Tải danh sách tài liệu từ localStorage với prefix và kiểm tra hạn sử dụng
     */
    function loadSavedItems() {
        try {
            const savedItems = localStorage.getItem(`${STORAGE_PREFIX}items`);
            if (savedItems) {
                massDownloadItems = JSON.parse(savedItems);
                
                // Kiểm tra và xóa các tài liệu đã hết hạn
                checkExpiredItems();
            } else {
                massDownloadItems = [];
            }
        } catch (e) {
            console.error('Error loading mass download items:', e);
            massDownloadItems = [];
        }
    }
    
    /**
     * Cập nhật UI dựa trên trạng thái hiện tại
     */
    function updateUI() {
        const itemCount = massDownloadItems.length;
        
        // Cập nhật số lượng
        countBadge.textContent = itemCount;
        barCount.textContent = itemCount;
        panelCount.textContent = itemCount;
        
        // Cập nhật trạng thái các nút
        const buttonsDisabled = itemCount === 0;
        downloadBtn.disabled = buttonsDisabled;
        clearBtn.disabled = buttonsDisabled;
        panelDownloadBtn.disabled = buttonsDisabled;
        panelClearBtn.disabled = buttonsDisabled;
        
        // Thêm hiệu ứng nhấp nháy cho nút cấp 1 khi có tài liệu
        if (itemCount > 0) {
            toggleBtn.classList.add('has-items');
        } else {
            toggleBtn.classList.remove('has-items');
        }
        
        renderFileList();
    }
    
    /**
     * Hiển thị danh sách tài liệu
     */
    function renderFileList() {
        // Xóa nội dung cũ
        fileList.innerHTML = '';
        
        // Kiểm tra nếu không có tài liệu nào
        if (massDownloadItems.length === 0) {
            const emptyMessage = document.createElement('div');
            emptyMessage.className = 'mdp-empty-message';
            emptyMessage.innerHTML = `
                <i class="fas fa-info-circle"></i>
                <p>${strings.noDocuments}</p>
            `;
            fileList.appendChild(emptyMessage);
            return;
        }
        
        // Hiển thị danh sách tài liệu
        massDownloadItems.forEach(item => {
            // Tính thời gian còn lại
            const now = new Date().getTime();
            const timeLeft = item.expiry - now;
            const minutesLeft = Math.floor(timeLeft / (60 * 1000));
            const hoursLeft = Math.floor(minutesLeft / 60);
            const remainingMinutes = minutesLeft % 60;
            
            // Định dạng thời gian còn lại
            let expiryText = '';
            if (hoursLeft > 0) {
                expiryText = `${hoursLeft}h ${remainingMinutes}m`;
            } else {
                expiryText = `${minutesLeft}m`;
            }
            
            const fileItem = document.createElement('div');
            fileItem.className = 'mdp-file-item';
            fileItem.innerHTML = `
                <div class="mdp-file-info">
                    <div class="mdp-file-icon">
                        <i class="fas fa-file-${getFileIconType(item.type)}"></i>
                    </div>
                    <div class="mdp-file-details">
                        <div class="mdp-file-name">${item.name}</div>
                        <div class="mdp-file-meta">
                            <span class="mdp-file-type">${item.type}</span>
                            <span class="mdp-file-size">${item.size}</span>
                            <span class="mdp-file-expiry" title="Time until expiry"><i class="fas fa-clock"></i> ${expiryText}</span>
                        </div>
                    </div>
                </div>
                <button class="mdp-file-remove" data-id="${item.id}" title="Xóa khỏi danh sách">
                    <i class="fas fa-times"></i>
                </button>
            `;
            
            // Thêm sự kiện xóa
            const removeButton = fileItem.querySelector('.mdp-file-remove');
            removeButton.addEventListener('click', function() {
                removeItem(this.dataset.id);
            });
            
            fileList.appendChild(fileItem);
        });
    }
    
    /**
     * Lấy loại icon dựa trên loại file
     */
    function getFileIconType(fileType) {
        const fileIcons = {
            'pdf': 'pdf',
            'doc': 'word', 'docx': 'word',
            'xls': 'excel', 'xlsx': 'excel', 'csv': 'excel',
            'ppt': 'powerpoint', 'pptx': 'powerpoint',
            'jpg': 'image', 'jpeg': 'image', 'png': 'image', 'gif': 'image', 'bmp': 'image', 'svg': 'image', 'webp': 'image',
            'zip': 'archive', 'rar': 'archive', '7z': 'archive', 'tar': 'archive', 'gz': 'archive',
            'mp3': 'audio', 'wav': 'audio', 'ogg': 'audio', 'flac': 'audio',
            'mp4': 'video', 'avi': 'video', 'mov': 'video', 'wmv': 'video', 'mkv': 'video',
            'txt': 'text', 'md': 'text', 'log': 'text',
            'html': 'code', 'css': 'code', 'js': 'code', 'json': 'code', 'xml': 'code', 'php': 'code', 'py': 'code', 'java': 'code', 'cpp': 'code', 'c': 'code', 'rb': 'code', 'go': 'code', 'ts': 'code'
        };
        
        return fileIcons[String(fileType).toLowerCase()] || 'alt';
    }

    
    /**
     * Hiển thị thông báo toast
     */
    function showToast(title, message, type = 'info') {
        const toast = document.createElement('div');
        toast.className = `mdp-toast mdp-toast-${type}`;
        toast.innerHTML = `
            <div class="mdp-toast-header">
                <div class="mdp-toast-title">${title}</div>
                <button class="mdp-toast-close">&times;</button>
            </div>
            <div class="mdp-toast-message">${message}</div>
        `;
        
        // Thêm sự kiện đóng toast
        const closeButton = toast.querySelector('.mdp-toast-close');
        closeButton.addEventListener('click', function() {
            hideToast(toast);
        });
        
        // Thêm vào container
        toastContainer.appendChild(toast);
        
        // Tự động đóng sau 5 giây
        setTimeout(() => {
            hideToast(toast);
        }, 5000);
    }
    
    /**
     * Ẩn thông báo toast
     */
    function hideToast(toast) {
        toast.classList.add('hiding');
        setTimeout(() => {
            if (toast.parentNode) {
                toast.parentNode.removeChild(toast);
            }
        }, 300);
    }
    
    /**
     * Làm nổi bật badge
     */
    function animateBadge() {
        countBadge.classList.add('animated');
        barCount.classList.add('animated');
        panelCount.classList.add('animated');
        
        setTimeout(() => {
            countBadge.classList.remove('animated');
            barCount.classList.remove('animated');
            panelCount.classList.remove('animated');
        }, 500);
    }
    
    // Thêm event listeners để đặt lại timer khi có hoạt động
    document.addEventListener('mousemove', resetAutoMinimize);
    document.addEventListener('keydown', resetAutoMinimize);
    document.addEventListener('click', resetAutoMinimize);
    
    // Thêm CSS cho hiển thị thời gian hết hạn
    const style = document.createElement('style');
    style.textContent = `
        .mdp-file-expiry {
            margin-left: 10px;
            font-size: 0.85em;
            color: #777;
        }
        .mdp-file-expiry i {
            margin-right: 3px;
        }
    `;
    document.head.appendChild(style);
});
