<?php
/**
 * 安装向导
 * Installation Wizard
 */

// 检查是否已安装
if (file_exists(__DIR__ . '/.installed')) {
    header('Location: index.php');
    exit;
}

$error = '';
$success = '';
$step = $_GET['step'] ?? 1;

// 处理安装步骤
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    switch ($step) {
        case 1:
            // 数据库配置
            $dbHost = $_POST['db_host'] ?? 'localhost';
            $dbPort = $_POST['db_port'] ?? '3306';
            $dbName = $_POST['db_name'] ?? 'iot_kms_system';
            $dbUser = $_POST['db_user'] ?? 'root';
            $dbPass = $_POST['db_pass'] ?? '';

            try {
                $pdo = new PDO("mysql:host={$dbHost};port={$dbPort};charset=utf8mb4", $dbUser, $dbPass, [
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                ]);
                
                // 保存配置到session
                $_SESSION['install_db'] = compact('dbHost', 'dbPort', 'dbName', 'dbUser', 'dbPass');
                
                header('Location: install.php?step=2');
                exit;
            } catch (PDOException $e) {
                $error = '数据库连接失败: ' . $e->getMessage();
            }
            break;

        case 2:
            // 管理员配置
            $adminUser = $_POST['admin_user'] ?? 'admin';
            $adminPass = $_POST['admin_pass'] ?? '';
            $adminEmail = $_POST['admin_email'] ?? 'admin@localhost';
            $adminName = $_POST['admin_name'] ?? '系统管理员';

            if (strlen($adminPass) < 8) {
                $error = '管理员密码至少需要8位';
            } else {
                $_SESSION['install_admin'] = compact('adminUser', 'adminPass', 'adminEmail', 'adminName');
                header('Location: install.php?step=3');
                exit;
            }
            break;

        case 3:
            // 高级配置
            $enableQKD = $_POST['enable_qkd'] ?? false;
            $enableChain = $_POST['enable_chain'] ?? false;
            
            $_SESSION['install_advanced'] = compact('enableQKD', 'enableChain');
            
            // 执行安装
            $result = performInstallation();
            if ($result['success']) {
                $success = '安装成功！';
                header('Location: install.php?step=4');
                exit;
            } else {
                $error = $result['message'];
            }
            break;
    }
}

function performInstallation(): array {
    try {
        $db = $_SESSION['install_db'];
        $admin = $_SESSION['install_admin'];
        $advanced = $_SESSION['install_advanced'];

        // 连接数据库
        $pdo = new PDO("mysql:host={$db['dbHost']};port={$db['dbPort']};charset=utf8mb4", $db['dbUser'], $db['dbPass'], [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ]);

        // 创建数据库
        $pdo->exec("CREATE DATABASE IF NOT EXISTS {$db['dbName']} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
        $pdo->exec("USE {$db['dbName']}");

        // 执行SQL文件
        $sql = file_get_contents(__DIR__ . '/sql/database.sql');
        $statements = array_filter(array_map('trim', explode(';', $sql)));
        
        foreach ($statements as $statement) {
            if (!empty($statement) && !str_starts_with($statement, '--')) {
                $pdo->exec($statement);
            }
        }

        // 更新管理员密码
        $adminHash = password_hash($admin['adminPass'], PASSWORD_DEFAULT);
        $stmt = $pdo->prepare("UPDATE users SET username = ?, email = ?, password_hash = ?, full_name = ? WHERE id = 1");
        $stmt->execute([$admin['adminUser'], $admin['adminEmail'], $adminHash, $admin['adminName']]);

        // 创建配置文件
        $encryptionKey = bin2hex(random_bytes(32));
        $jwtSecret = bin2hex(random_bytes(32));
        
        $configContent = "<?php
// 数据库配置
\$_ENV['DB_HOST'] = '{$db['dbHost']}';
\$_ENV['DB_PORT'] = '{$db['dbPort']}';
\$_ENV['DB_NAME'] = '{$db['dbName']}';
\$_ENV['DB_USER'] = '{$db['dbUser']}';
\$_ENV['DB_PASS'] = '{$db['dbPass']}';

// 应用配置
\$_ENV['APP_URL'] = 'http://' . (\$_SERVER['HTTP_HOST'] ?? 'localhost');
\$_ENV['ENCRYPTION_KEY'] = '{$encryptionKey}';
\$_ENV['JWT_SECRET'] = '{$jwtSecret}';

// 长安链配置
\$_ENV['CHAINMAKER_ENABLED'] = " . ($advanced['enableChain'] ? 'true' : 'false') . ";
\$_ENV['CHAINMAKER_CHAIN_ID'] = 'chain1';
\$_ENV['CHAINMAKER_ORG_ID'] = 'org1';
\$_ENV['CHAINMAKER_NODE_HOST'] = '127.0.0.1';
\$_ENV['CHAINMAKER_NODE_PORT'] = 12301;

// QKD配置
\$_ENV['QKD_ENABLED'] = " . ($advanced['enableQKD'] ? 'true' : 'false') . ";
\$_ENV['QKD_PROVIDER'] = 'custom';
\$_ENV['QKD_API_URL'] = 'http://localhost:8080';
\$_ENV['QKD_API_KEY'] = '';

// 调试模式
\$_ENV['DEBUG_MODE'] = false;
";

        file_put_contents(__DIR__ . '/config/database.php', $configContent);

        // 创建安装标记
        file_put_contents(__DIR__ . '/.installed', date('Y-m-d H:i:s'));

        // 清理session
        unset($_SESSION['install_db']);
        unset($_SESSION['install_admin']);
        unset($_SESSION['install_advanced']);

        return ['success' => true];

    } catch (Exception $e) {
        return ['success' => false, 'message' => $e->getMessage()];
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>安装 - 物联网KMS管理系统</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root {
            --primary: #2563eb;
            --primary-dark: #1d4ed8;
            --success: #10b981;
            --danger: #ef4444;
            --warning: #f59e0b;
            --bg: #0f172a;
            --bg-card: #1e293b;
            --text: #f8fafc;
            --text-secondary: #cbd5e1;
            --border: #334155;
        }
        
        * { margin: 0; padding: 0; box-sizing: border-box; }
        
        body {
            font-family: 'Inter', -apple-system, sans-serif;
            background: linear-gradient(135deg, var(--bg) 0%, #1a365d 100%);
            color: var(--text);
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 20px;
        }
        
        .install-container {
            width: 100%;
            max-width: 500px;
        }
        
        .install-header {
            text-align: center;
            margin-bottom: 2rem;
        }
        
        .install-header i {
            font-size: 4rem;
            color: var(--primary);
            margin-bottom: 1rem;
        }
        
        .install-header h1 {
            font-size: 1.75rem;
            margin-bottom: 0.5rem;
        }
        
        .install-header p {
            color: var(--text-secondary);
        }
        
        .step-indicator {
            display: flex;
            justify-content: center;
            gap: 1rem;
            margin-bottom: 2rem;
        }
        
        .step {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background: var(--bg-card);
            border: 2px solid var(--border);
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: 600;
        }
        
        .step.active {
            background: var(--primary);
            border-color: var(--primary);
        }
        
        .step.completed {
            background: var(--success);
            border-color: var(--success);
        }
        
        .install-card {
            background: var(--bg-card);
            border-radius: 1rem;
            padding: 2rem;
            border: 1px solid var(--border);
        }
        
        .form-group {
            margin-bottom: 1.25rem;
        }
        
        .form-label {
            display: block;
            margin-bottom: 0.5rem;
            font-size: 0.875rem;
            color: var(--text-secondary);
        }
        
        .form-input {
            width: 100%;
            padding: 0.75rem 1rem;
            background: var(--bg);
            border: 1px solid var(--border);
            border-radius: 0.5rem;
            color: var(--text);
            font-size: 0.875rem;
        }
        
        .form-input:focus {
            outline: none;
            border-color: var(--primary);
        }
        
        .btn {
            width: 100%;
            padding: 0.875rem;
            background: var(--primary);
            color: white;
            border: none;
            border-radius: 0.5rem;
            font-size: 1rem;
            font-weight: 500;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 0.5rem;
        }
        
        .btn:hover {
            background: var(--primary-dark);
        }
        
        .alert {
            padding: 1rem;
            border-radius: 0.5rem;
            margin-bottom: 1rem;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }
        
        .alert-error {
            background: rgba(239, 68, 68, 0.2);
            border: 1px solid rgba(239, 68, 68, 0.3);
            color: #ef4444;
        }
        
        .alert-success {
            background: rgba(16, 185, 129, 0.2);
            border: 1px solid rgba(16, 185, 129, 0.3);
            color: #10b981;
        }
        
        .feature-toggle {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 1rem;
            background: var(--bg);
            border-radius: 0.5rem;
            margin-bottom: 1rem;
        }
        
        .feature-toggle label {
            display: flex;
            align-items: center;
            gap: 0.75rem;
            cursor: pointer;
        }
        
        .feature-toggle i {
            color: var(--primary);
        }
        
        .success-screen {
            text-align: center;
        }
        
        .success-screen i {
            font-size: 5rem;
            color: var(--success);
            margin-bottom: 1rem;
        }
        
        .success-screen h2 {
            margin-bottom: 1rem;
        }
        
        .success-screen p {
            color: var(--text-secondary);
            margin-bottom: 1.5rem;
        }
    </style>
</head>
<body>
    <div class="install-container">
        <div class="install-header">
            <i class="fas fa-shield-alt"></i>
            <h1>物联网KMS管理系统</h1>
            <p>安装向导 v2.0</p>
        </div>
        
        <?php if ($step < 4): ?>
        <div class="step-indicator">
            <div class="step <?php echo $step >= 1 ? 'active' : ''; ?> <?php echo $step > 1 ? 'completed' : ''; ?>">1</div>
            <div class="step <?php echo $step >= 2 ? 'active' : ''; ?> <?php echo $step > 2 ? 'completed' : ''; ?>">2</div>
            <div class="step <?php echo $step >= 3 ? 'active' : ''; ?> <?php echo $step > 3 ? 'completed' : ''; ?>">3</div>
        </div>
        <?php endif; ?>
        
        <div class="install-card">
            <?php if ($error): ?>
                <div class="alert alert-error">
                    <i class="fas fa-exclamation-circle"></i>
                    <?php echo htmlspecialchars($error); ?>
                </div>
            <?php endif; ?>
            
            <?php switch ($step):
                case 1: ?>
                    <!-- 步骤1: 数据库配置 -->
                    <h2 style="margin-bottom: 1.5rem;"><i class="fas fa-database"></i> 数据库配置</h2>
                    <form method="POST">
                        <div class="form-group">
                            <label class="form-label">数据库主机</label>
                            <input type="text" name="db_host" class="form-input" value="localhost" required>
                        </div>
                        <div class="form-group">
                            <label class="form-label">端口</label>
                            <input type="text" name="db_port" class="form-input" value="3306" required>
                        </div>
                        <div class="form-group">
                            <label class="form-label">数据库名</label>
                            <input type="text" name="db_name" class="form-input" value="iot_kms_system" required>
                        </div>
                        <div class="form-group">
                            <label class="form-label">用户名</label>
                            <input type="text" name="db_user" class="form-input" value="root" required>
                        </div>
                        <div class="form-group">
                            <label class="form-label">密码</label>
                            <input type="password" name="db_pass" class="form-input">
                        </div>
                        <button type="submit" class="btn">
                            <i class="fas fa-arrow-right"></i> 下一步
                        </button>
                    </form>
                    <?php break; ?>
                    
                case 2: ?>
                    <!-- 步骤2: 管理员配置 -->
                    <h2 style="margin-bottom: 1.5rem;"><i class="fas fa-user-shield"></i> 管理员账户</h2>
                    <form method="POST">
                        <div class="form-group">
                            <label class="form-label">用户名</label>
                            <input type="text" name="admin_user" class="form-input" value="admin" required>
                        </div>
                        <div class="form-group">
                            <label class="form-label">密码</label>
                            <input type="password" name="admin_pass" class="form-input" required minlength="8" placeholder="至少8位">
                        </div>
                        <div class="form-group">
                            <label class="form-label">邮箱</label>
                            <input type="email" name="admin_email" class="form-input" value="admin@localhost" required>
                        </div>
                        <div class="form-group">
                            <label class="form-label">姓名</label>
                            <input type="text" name="admin_name" class="form-input" value="系统管理员">
                        </div>
                        <button type="submit" class="btn">
                            <i class="fas fa-arrow-right"></i> 下一步
                        </button>
                    </form>
                    <?php break; ?>
                    
                case 3: ?>
                    <!-- 步骤3: 高级配置 -->
                    <h2 style="margin-bottom: 1.5rem;"><i class="fas fa-cogs"></i> 高级配置</h2>
                    <form method="POST">
                        <div class="feature-toggle">
                            <label>
                                <i class="fas fa-atom"></i>
                                <div>
                                    <strong>启用QKD量子密钥</strong>
                                    <div style="font-size: 0.75rem; color: var(--text-secondary);">对接量子密钥分发设备</div>
                                </div>
                            </label>
                            <input type="checkbox" name="enable_qkd" value="1">
                        </div>
                        
                        <div class="feature-toggle">
                            <label>
                                <i class="fas fa-cubes"></i>
                                <div>
                                    <strong>启用长安链区块链</strong>
                                    <div style="font-size: 0.75rem; color: var(--text-secondary);">密钥和证书上链存证</div>
                                </div>
                            </label>
                            <input type="checkbox" name="enable_chain" value="1">
                        </div>
                        
                        <button type="submit" class="btn">
                            <i class="fas fa-check"></i> 完成安装
                        </button>
                    </form>
                    <?php break; ?>
                    
                case 4: ?>
                    <!-- 安装成功 -->
                    <div class="success-screen">
                        <i class="fas fa-check-circle"></i>
                        <h2>安装成功！</h2>
                        <p>物联网KMS管理系统已成功安装，您现在可以登录系统开始使用。</p>
                        <a href="login.php" class="btn">
                            <i class="fas fa-sign-in-alt"></i> 进入系统
                        </a>
                    </div>
                    <?php break; ?>
                    
            <?php endswitch; ?>
        </div>
    </div>
</body>
</html>
