<?php
require_once __DIR__ . '/../MPHX/common.php';

if (!is_admin_login()) {
    header('Location: /admin/login.php');
    exit;
}

// 获取程序分类列表
$categories = array();
$res = $DB->query("SELECT * FROM `program_categories` ORDER BY `sort_order` ASC, `id` ASC");
while ($row = $DB->fetch($res)) {
    $categories[] = $row;
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>导入程序 - 宝塔主机管理系统</title>
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/css/all.min.css">
    <link rel="stylesheet" href="css/style.css?v=2026040501">
</head>
<body>
    <div class="content-area">
        <div class="card">
            <h3><i class="fas fa-file-import"></i> 导入程序</h3>

            <div class="alert alert-info">
                <h6><i class="fas fa-info-circle"></i> 使用说明</h6>
                <p class="mb-1">1. 支持导入从其他系统导出的ZIP文件</p>
                <p class="mb-1">2. ZIP文件应包含 programs.json 和 images/ 目录</p>
                <p class="mb-0">3. 如果程序名称已存在，将自动跳过</p>
            </div>

            <form id="drForm" enctype="multipart/form-data">
                <div class="form-group">
                    <label for="import_file">选择ZIP文件 <span class="text-danger">*</span></label>
                    <div class="custom-file">
                        <input type="file" name="import_file" id="import_file" class="custom-file-input" accept=".zip" required>
                        <label class="custom-file-label" for="import_file">选择文件...</label>
                    </div>
                    <small class="form-text text-muted">请选择从其他系统导出的程序ZIP文件</small>
                </div>

                <!-- 文件预览区域 -->
                <div id="filePreview" class="card bg-light mb-3" style="display: none;">
                    <div class="card-body">
                        <h6 class="card-title"><i class="fas fa-file-archive"></i> 文件内容预览</h6>
                        <div id="previewContent"></div>
                    </div>
                </div>

                <!-- 程序列表预览 -->
                <div id="programPreview" class="card bg-light mb-3" style="display: none;">
                    <div class="card-body">
                        <h6 class="card-title"><i class="fas fa-list"></i> 可导入的程序</h6>
                        <div class="table-responsive">
                            <table class="table table-sm table-bordered">
                                <thead>
                                    <tr>
                                        <th style="width: 40px;">
                                            <input type="checkbox" id="selectAllPrograms" checked>
                                        </th>
                                        <th>程序名称</th>
                                        <th>类型</th>
                                        <th>版本</th>
                                        <th>价格</th>
                                        <th>状态</th>
                                    </tr>
                                </thead>
                                <tbody id="programListBody">
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>

                <button type="button" class="btn btn-primary" id="importBtn" onclick="importPrograms(this)" disabled>
                    <i class="fas fa-upload"></i> 开始导入
                </button>
                <a href="list.php?gn=cx" class="btn btn-secondary">
                    <i class="fas fa-arrow-left"></i> 返回列表
                </a>
            </form>
        </div>
    </div>

    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/bootstrap.bundle.min.js"></script>
    <script>
    // 存储解析后的程序数据
    var parsedPrograms = [];

    // 文件选择变化
    $('#import_file').on('change', function() {
        var file = this.files[0];
        if (file) {
            $('.custom-file-label').text(file.name);
            parseZipFile(file);
        }
    });

    // 解析ZIP文件
    function parseZipFile(file) {
        var formData = new FormData();
        formData.append('egn', 'parse_import_zip');
        formData.append('file', file);

        $.ajax({
            type: 'POST',
            url: 'ajax.php',
            data: formData,
            processData: false,
            contentType: false,
            dataType: 'json',
            beforeSend: function() {
                $('#importBtn').prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> 解析中...');
            },
            success: function(data) {
                $('#importBtn').prop('disabled', false).html('<i class="fas fa-upload"></i> 开始导入');

                if (data.code === '解析成功') {
                    parsedPrograms = data.programs;
                    showPreview(data);
                    $('#importBtn').prop('disabled', false);
                } else {
                    alert(data.code);
                    $('#filePreview').hide();
                    $('#programPreview').hide();
                }
            },
            error: function() {
                $('#importBtn').prop('disabled', false).html('<i class="fas fa-upload"></i> 开始导入');
                alert('文件解析失败，请检查文件格式');
            }
        });
    }

    // 显示预览
    function showPreview(data) {
        // 显示文件信息
        var html = '<ul class="list-unstyled mb-0">';
        html += '<li><strong>导出时间：</strong>' + (data.export_time || '未知') + '</li>';
        html += '<li><strong>导出版本：</strong>' + (data.export_version || '未知') + '</li>';
        html += '<li><strong>程序数量：</strong>' + (data.program_count || 0) + ' 个</li>';
        html += '<li><strong>图片数量：</strong>' + (data.image_count || 0) + ' 张</li>';
        html += '</ul>';
        $('#previewContent').html(html);
        $('#filePreview').show();

        // 显示程序列表
        var tbody = '';
        data.programs.forEach(function(program, index) {
            var statusBadge = program.status == 1
                ? '<span class="badge badge-success">上架</span>'
                : '<span class="badge badge-secondary">下架</span>';

            tbody += '<tr>';
            tbody += '<td><input type="checkbox" class="program-check" value="' + index + '" checked></td>';
            tbody += '<td>' + escapeHtml(program.name) + '</td>';
            tbody += '<td>' + escapeHtml(program.type || '-') + '</td>';
            tbody += '<td>' + escapeHtml(program.version || '-') + '</td>';
            tbody += '<td>¥' + (program.jg || 0) + '</td>';
            tbody += '<td>' + statusBadge + '</td>';
            tbody += '</tr>';
        });
        $('#programListBody').html(tbody);
        $('#programPreview').show();
    }

    // 全选/取消全选
    $('#selectAllPrograms').on('change', function() {
        $('.program-check').prop('checked', $(this).prop('checked'));
    });

    // 导入程序
    function importPrograms(btn) {
        var selectedIndices = [];
        $('.program-check:checked').each(function() {
            selectedIndices.push($(this).val());
        });

        if (selectedIndices.length === 0) {
            alert('请至少选择一个程序');
            return;
        }

        var selectedPrograms = [];
        selectedIndices.forEach(function(index) {
            selectedPrograms.push(parsedPrograms[index]);
        });

        if (!confirm('确定要导入 ' + selectedPrograms.length + ' 个程序吗？')) {
            return;
        }

        var $btn = $(btn);
        var originalText = $btn.html();
        $btn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> 导入中...');

        // 获取文件
        var file = $('#import_file')[0].files[0];
        var formData = new FormData();
        formData.append('egn', 'import_programs_zip');
        formData.append('file', file);
        formData.append('programs', JSON.stringify(selectedPrograms));

        $.ajax({
            type: 'POST',
            url: 'ajax.php',
            data: formData,
            processData: false,
            contentType: false,
            dataType: 'json',
            success: function(data) {
                $btn.prop('disabled', false).html(originalText);
                if (data.code === '导入完成') {
                    alert('导入完成！\n成功：' + data.imported + ' 个\n跳过：' + data.skipped + ' 个');
                    location.href = 'list.php?gn=cx';
                } else {
                    alert(data.code);
                }
            },
            error: function(xhr, status, error) {
                $btn.prop('disabled', false).html(originalText);
                console.error('导入请求失败:', status, error);
                console.error('响应内容:', xhr.responseText);
                alert('导入失败: ' + (error || '网络错误') + '\n请检查浏览器控制台查看详细信息');
            }
        });
    }

    function escapeHtml(text) {
        if (!text) return '';
        return String(text).replace(/[&<>"]/g, function(match) {
            return {'&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;'}[match];
        });
    }
    </script>
</body>
</html>
