/**
 * Post Exporter Script
 * 
 * JavaScript cho chức năng Export/Import bài viết WordPress
 * JavaScript for WordPress Post Export/Import functionality
 * 
 * @package AI_Auto_Tool
 * @version 2.0
 * 
 * CHỨC NĂNG / FEATURES:
 * - Fetch posts from URLs / Lấy bài viết từ URLs
 * - Export to JSON / Xuất ra JSON
 * - Import from JSON / Nhập từ JSON
 * - Delete posts / Xóa bài viết
 * - Restore posts / Khôi phục bài viết
 */

// ========================================
// FETCH POSTS / LẤY BÀI VIẾT
// ========================================

/**
 * Lấy danh sách bài viết từ URLs / Fetch posts from URL list
 * 
 * @param {string} idlist - ID của textarea chứa danh sách URLs / ID of textarea containing URL list
 * @param {string} divid - ID của div hiển thị kết quả / ID of div to display results
 */
function fetchPosts(idlist, divid) {
    // Lấy danh sách URLs từ textarea, mỗi URL trên một dòng
    // Get URL list from textarea, one URL per line
    var urlList = jQuery('#' + idlist).val().split('\n');
    
    // Hiển thị loading spinner / Show loading spinner
    showLoading();
    
    // Gửi AJAX request đến WordPress / Send AJAX request to WordPress
    jQuery.ajax({
        url: ajaxurl,
        type: 'POST',
        data: {
            action: 'fetch_posts_by_urls',
            security: postExporterData.nonce,
            urlList: urlList,
        },
        success: function(response) {
            hideLoading();
            
            if (response.success) {
                var posts = response.data;
                displayPosts(posts, divid);
            } else {
                // Xử lý lỗi / Handle error
                console.error('Error:', response.data);
                alert('Error: ' + response.data);
            }
        },
        error: function(xhr, status, error) {
            hideLoading();
            // Xử lý lỗi Ajax / Handle Ajax error
            console.error('Ajax Error:', error);
            alert('Ajax Error: ' + error);
        }
    });
}

// ========================================
// DISPLAY POSTS / HIỂN THỊ BÀI VIẾT
// ========================================

/**
 * Hiển thị danh sách bài viết với checkbox / Display post list with checkboxes
 * 
 * @param {Array} posts - Mảng các bài viết / Array of posts
 * @param {string} divid - ID của div hiển thị / ID of display div
 */
function displayPosts(posts, divid) {
    // Xóa nội dung cũ / Clear old content
    jQuery('#' + divid).empty();
    
    let count = 1;
    
    // Thêm nút "Check All" phía trên / Add "Check All" button at top
    jQuery('#' + divid).append(
        '<button type="button" class="btn" onclick="checkAll()">' +
        '<i class="fa-solid fa-check-double"></i> Check All / Chọn Tất Cả' +
        '</button><br><br>'
    );
    
    // Lặp qua từng bài viết và tạo checkbox / Loop through posts and create checkboxes
    posts.forEach(function(post) {
        // Mã hóa content để lưu trong data attribute / Encode content for data attribute
        var encodedContent = encodeURIComponent(post.content);
        var tagsString = post.tags.join(', ');
        var categoriesString = post.categories.join(', ');

        // Tạo checkbox với tất cả thông tin bài viết / Create checkbox with all post info
        var checkbox = 
            '<div class="post-item" style="padding: 10px; margin: 5px 0; background: #fff; border-left: 3px solid #0073aa; border-radius: 3px;">' +
            '<label style="display: flex; align-items: start; cursor: pointer;">' +
            '<input type="checkbox" class="postCheckbox" ' +
            'data-title="' + post.title + '" ' +
            'data-post-id="' + post.id + '" ' +
            'data-content="' + encodedContent + '" ' +
            'data-tags="' + tagsString + '" ' +
            'data-slug="' + post.slug + '" ' +
            'data-language="' + post.language + '" ' +
            'data-categories="' + categoriesString + '" ' +
            'style="margin-right: 10px; margin-top: 3px;"> ' +
            '<div>' +
            '<strong style="color: #0073aa;">' + count + '. ' + post.title + '</strong><br>' +
            '<small style="color: #666;">' +
            'ID: ' + post.id + ' | ' +
            'Slug: ' + post.slug + ' | ' +
            'Language: ' + post.language +
            '</small><br>' +
            '<small style="color: #999;">' +
            'Tags: ' + tagsString + ' | ' +
            'Categories: ' + categoriesString +
            '</small>' +
            '</div>' +
            '</label>' +
            '</div>';

        jQuery('#' + divid).append(checkbox);
        count = count + 1;
    });

    // Thêm nút "Check All" phía dưới / Add "Check All" button at bottom
    jQuery('#' + divid).append(
        '<br><button type="button" class="btn" onclick="checkAll()">' +
        '<i class="fa-solid fa-check-double"></i> Check All / Chọn Tất Cả' +
        '</button>'
    );
}

// ========================================
// CHECK ALL / CHỌN TẤT CẢ
// ========================================

/**
 * Chọn/bỏ chọn tất cả checkbox / Check/uncheck all checkboxes
 * Nếu có ít nhất 1 checkbox chưa được chọn, chọn tất cả
 * If at least one checkbox is unchecked, check all
 */
function checkAll() {
    var checkboxes = jQuery('.postCheckbox');

    // Kiểm tra xem có ít nhất 1 checkbox chưa được chọn không
    // Check if at least one checkbox is unchecked
    var isAtLeastOneUnchecked = checkboxes.is(':not(:checked)');

    // Nếu có checkbox chưa chọn, chọn tất cả; ngược lại bỏ chọn tất cả
    // If any unchecked, check all; otherwise uncheck all
    checkboxes.prop('checked', isAtLeastOneUnchecked);
}

// ========================================
// EXPORT TO JSON / XUẤT RA JSON
// ========================================

/**
 * Xuất các bài viết đã chọn ra file JSON / Export selected posts to JSON file
 * Tạo file JSON và tự động download
 */
function exportToJson() {
    // Lấy tất cả các bài viết đã được chọn / Get all checked posts
    var selectedPosts = jQuery('.postCheckbox:checked');
    
    if (selectedPosts.length === 0) {
        alert('Please select at least one post to export. / Vui lòng chọn ít nhất một bài viết để xuất.');
        return;
    }
    
    var exportData = [];

    // Lặp qua từng bài viết đã chọn / Loop through selected posts
    selectedPosts.each(function() {
        var title = jQuery(this).data('title');
        var postId = jQuery(this).data('post-id');
        var content = decodeURIComponent(jQuery(this).data('content'));
        var slug = jQuery(this).data('slug');
        var tags = jQuery(this).data('tags');
        var categories = jQuery(this).data('categories');
        var language = jQuery(this).data('language');

        // Tạo object cho mỗi bài viết / Create object for each post
        var post = {
            title: title,
            content: content,
            slug: slug,
            tags: tags,
            categories: categories,
            language: language,
        }
        
        exportData.push(post);
    });

    // Chuyển đổi thành JSON string / Convert to JSON string
    var jsonData = JSON.stringify(exportData, null, 2);

    // Tạo blob và download file / Create blob and download file
    var blob = new Blob([jsonData], { type: 'application/json' });
    var url = URL.createObjectURL(blob);
    var a = document.createElement('a');
    a.href = url;
    a.download = 'exported_posts_' + Date.now() + '.json';
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
    
    // Thông báo thành công / Success notification
    alert('Successfully exported ' + exportData.length + ' posts! / Đã xuất thành công ' + exportData.length + ' bài viết!');
}

// ========================================
// IMPORT FROM JSON URL / NHẬP TỪ JSON URL
// ========================================

/**
 * Import bài viết từ URL JSON / Import posts from JSON URL
 * Yêu cầu người dùng nhập URL của file JSON
 */
function importFromJson() {
    // Yêu cầu nhập URL / Prompt for URL
    var jsonUrl = prompt('Enter URL of JSON file to import:\nNhập URL của file JSON để import:');
    
    if (!jsonUrl) {
        return; // User cancelled / Người dùng hủy
    }
    
    showLoading();
    
    // Gửi AJAX request để import / Send AJAX request to import
    jQuery.ajax({
        url: ajaxurl,
        type: 'POST',
        data: {
            action: 'import_from_json',
            security: postExporterData.nonce,
            json_data_url: jsonUrl,
        },
        success: function(response) {
            hideLoading();
            
            if (response.success) {
                alert('Import successful! / Import thành công!\n' + response.data);
                console.log('Import successful!', response.data);
            } else {
                alert('Import failed! / Import thất bại!\n' + response.data);
                console.error('Import error:', response.data);
            }
        },
        error: function(xhr, status, error) {
            hideLoading();
            alert('Error importing posts from ' + jsonUrl + '\nLỗi khi import từ: ' + jsonUrl);
            console.error('Error importing posts:', error);
        }
    });
}

// ========================================
// IMPORT FROM JSON FILE / NHẬP TỪ FILE JSON
// ========================================

/**
 * Import bài viết từ file JSON upload / Import posts from uploaded JSON file
 * Đọc file và gửi dữ liệu lên server
 */
function importFromJsonFile() {
    // Lấy file input element / Get file input element
    var fileInput = document.getElementById('jsonFileInput');
    var file = fileInput.files[0];
    
    // Kiểm tra xem đã chọn file chưa / Check if file is selected
    if (!file) {
        alert('Please select a JSON file first. / Vui lòng chọn file JSON trước.');
        return;
    }
    
    showLoading();

    // Đọc file / Read file
    var reader = new FileReader();
    
    reader.onload = function(e) {
        try {
            // Parse JSON data / Parse dữ liệu JSON
            var jsonData = JSON.parse(e.target.result);

            // Gửi dữ liệu lên server qua AJAX / Send data to server via AJAX
            jQuery.ajax({
                url: ajaxurl,
                type: 'POST',
                data: {
                    action: 'import_from_json_file',
                    security: postExporterData.nonce,
                    json_data: jsonData,
                },
                success: function(response) {
                    hideLoading();

                    if (response.success) {
                        alert('Import successful! / Import thành công!\n' + response.data);
                        console.log('Import successful!', response.data);
                        
                        // Reset file input / Reset file input
                        fileInput.value = '';
                    } else {
                        alert('Import failed! / Import thất bại!\n' + response.data);
                        console.error('Import error:', response.data);
                    }
                },
                error: function(xhr, status, error) {
                    hideLoading();
                    alert('Ajax error during import! / Lỗi Ajax khi import!');
                    console.error('Ajax error:', error);
                }
            });
        } catch (parseError) {
            hideLoading();
            alert('Invalid JSON file! / File JSON không hợp lệ!\n' + parseError.message);
            console.error('JSON parse error:', parseError);
        }
    };

    reader.onerror = function() {
        hideLoading();
        alert('Error reading file! / Lỗi khi đọc file!');
    };

    // Đọc file dưới dạng text / Read file as text
    reader.readAsText(file);
}

// ========================================
// DELETE POSTS / XÓA BÀI VIẾT
// ========================================

/**
 * Xóa các bài viết KHÔNG nằm trong danh sách đã chọn / Delete posts NOT in selected list
 * Cảnh báo: Tất cả bài viết không được chọn sẽ bị xóa vào thùng rác
 */
function DeletePostex() {
    // Lấy các bài viết đã chọn / Get selected posts
    var selectedPosts = jQuery('.postCheckbox:checked');
    
    if (selectedPosts.length === 0) {
        alert('Please select posts you want to KEEP. All other posts will be deleted! / Vui lòng chọn bài viết muốn GIỮ LẠI. Tất cả bài viết khác sẽ bị xóa!');
        return;
    }
    
    // Xác nhận hành động nguy hiểm / Confirm dangerous action
    var confirmation = confirm(
        'WARNING / CẢNH BÁO:\n\n' +
        'You have selected ' + selectedPosts.length + ' posts to KEEP.\n' +
        'Bạn đã chọn ' + selectedPosts.length + ' bài viết để GIỮ LẠI.\n\n' +
        'ALL OTHER POSTS will be moved to TRASH!\n' +
        'TẤT CẢ BÀI VIẾT KHÁC sẽ bị chuyển vào THÙNG RÁC!\n\n' +
        'Are you sure? / Bạn có chắc chắn?'
    );
    
    if (!confirmation) {
        return; // User cancelled / Người dùng hủy
    }
    
    var exportData = [];

    // Lặp qua các bài viết đã chọn và lấy ID / Loop through selected posts and get IDs
    selectedPosts.each(function() {
        var postId = jQuery(this).data('post-id');
        
        var post = {
            id: postId,
        }
        
        exportData.push(post);
    });

    showLoading();
    
    // Gửi AJAX request để xóa / Send AJAX request to delete
    jQuery.ajax({
        url: ajaxurl,
        type: 'POST',
        data: {
            action: 'delete_post_not_in',
            security: postExporterData.nonce,
            exportData: exportData,
        },
        success: function(response) {
            hideLoading();
            
            if (response.success) {
                alert('Success! / Thành công!\n' + response.data);
                console.log('Delete successful:', response.data);
            } else {
                alert('Error! / Lỗi!\n' + response.data);
                console.error('Delete error:', response.data);
            }
        },
        error: function(xhr, status, error) {
            hideLoading();
            alert('Ajax error! / Lỗi Ajax!');
            console.error('Ajax error:', error);
        }
    });
}

// ========================================
// RESTORE POSTS / KHÔI PHỤC BÀI VIẾT
// ========================================

/**
 * Khôi phục các bài viết đã xóa / Restore deleted posts
 * Khôi phục các bài viết đã bị xóa bởi công cụ này
 */
function restoreTrashedPosts() {
    // Xác nhận hành động / Confirm action
    var confirmation = confirm(
        'This will restore all posts that were deleted by this tool.\n' +
        'Điều này sẽ khôi phục tất cả bài viết đã bị xóa bởi công cụ này.\n\n' +
        'Continue? / Tiếp tục?'
    );
    
    if (!confirmation) {
        return; // User cancelled / Người dùng hủy
    }
    
    showLoading();
    
    // Gửi AJAX request để khôi phục / Send AJAX request to restore
    jQuery.ajax({
        type: 'POST',
        url: ajaxurl,
        data: {
            action: 'restore_trashed_posts_action',
            security: postExporterData.nonce,
        },
        success: function(response) {
            hideLoading();
            
            if (response.success) {
                alert('Success! / Thành công!\n' + response.data);
                console.log('Restore successful:', response.data);
            } else {
                alert('Error! / Lỗi!\n' + response.data);
                console.error('Restore error:', response.data);
            }
        },
        error: function(xhr, status, error) {
            hideLoading();
            alert('Ajax error! / Lỗi Ajax!');
            console.error('Ajax error:', error);
        }
    });
}

// ========================================
// UTILITY FUNCTIONS / HÀM TIỆN ÍCH
// ========================================

/**
 * Hiển thị loading spinner / Show loading spinner
 */
function showLoading() {
    jQuery('.aiautotool_eximport_loading-icon').html('<span class="spinner is-active"></span>');
    jQuery('.aiautotool_eximport_loading-icon').show();
}

/**
 * Ẩn loading spinner / Hide loading spinner
 */
function hideLoading() {
    jQuery('.aiautotool_eximport_loading-icon').hide();
    jQuery('.aiautotool_eximport_loading-icon').html('');
}

// ========================================
// DOCUMENT READY / KHỞI TẠO KHI TRANG SẴN SÀNG
// ========================================

jQuery(document).ready(function($) {
    console.log('Post Exporter Script loaded successfully / Script Post Exporter đã tải thành công');
    
    // Tab navigation / Điều hướng tab
    $('.nav-tab').click(function() {
        var target = $(this).attr('href');
        
        // Xóa active class khỏi tất cả tabs / Remove active class from all tabs
        $('.nav-tab').removeClass('sotabt');
        $('.sotab-box').removeClass('ftbox');
        
        // Thêm active class cho tab được chọn / Add active class to selected tab
        $(this).addClass('sotabt');
        $(target).addClass('ftbox');
        
        return false; // Prevent default link behavior
    });
});

// ========================================
// END OF FILE / KẾT THÚC FILE
// ========================================
