<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Prevent reinstallation
if (file_exists(__DIR__ . "/installed.lock")) {
    die("<h2 style='color:#0ff;font-family:Arial;text-align:center;margin-top:50px;'>System already installed.</h2>");
}

// Handle form submit
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $admin_user = trim($_POST['admin_user']);
    $admin_pass = trim($_POST['admin_pass']);
    $admin_email = trim($_POST['admin_email']);
    $admin_dir  = trim($_POST['admin_dir']);
    $db_type    = $_POST['db_type'];

    if ($admin_user === "" || $admin_pass === "" || $admin_email === "" || $admin_dir === "") {
        $error = "All fields are required.";
    } else {

        // -----------------------------
        // CONFIG.PHP GENERATION
        // -----------------------------
        $config = "<?php
\$base = rtrim(dirname(\$_SERVER['SCRIPT_NAME']), '/');
define('BASE_URL', \$base === '' ? '/' : \$base . '/');
define('DB_TYPE', '$db_type');
";

        if ($db_type === "sqlite") {

            // SQLite path
            $db_path = __DIR__ . "/data/users.db";
            if (!is_dir(__DIR__ . "/data")) mkdir(__DIR__ . "/data", 0777, true);

            $config .= "
define('DB_PATH', __DIR__ . '/data/users.db');
define('DB_HOST', '');
define('DB_USER', '');
define('DB_PASS', '');
define('DB_NAME', '');
";

            // Connect SQLite
            $db = new PDO("sqlite:" . $db_path);
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        } else {

            // MySQL settings
            $mysql_host = $_POST['mysql_host'];
            $mysql_user = $_POST['mysql_user'];
            $mysql_pass = $_POST['mysql_pass'];
            $mysql_name = $_POST['mysql_name'];

            // Test MySQL connection
            $test = @new mysqli($mysql_host, $mysql_user, $mysql_pass, $mysql_name);
            if ($test->connect_error) {
                die("<h2 style='color:#f44;text-align:center;'>MySQL connection failed:<br>" . $test->connect_error . "</h2>");
            }

            // Check if tables exist
            $existing = $test->query("SHOW TABLES LIKE 'users'");
            if ($existing->num_rows > 0 && empty($_POST['wipe_db'])) {
                die("<h2 style='color:#0ff;text-align:center;'>Database already contains an installation.<br>
                <a href='install.php' style='color:#fff;'>Go back</a></h2>");
            }

            if (!empty($_POST['wipe_db'])) {
                $test->query("DROP TABLE IF EXISTS users");
                $test->query("DROP TABLE IF EXISTS themes");
                $test->query("DROP TABLE IF EXISTS user_settings");
            }

            $config .= "
define('DB_PATH', '');
define('DB_HOST', '$mysql_host');
define('DB_USER', '$mysql_user');
define('DB_PASS', '$mysql_pass');
define('DB_NAME', '$mysql_name');
";

            $db = $test;
        }

        // Write config.php
        file_put_contents(__DIR__ . "/config.php", $config);

        // -----------------------------
        // CREATE TABLES
        // -----------------------------
        $schema_sqlite = [
            "CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                username TEXT UNIQUE NOT NULL,
                password_hash TEXT NOT NULL,
                email TEXT,
                is_admin INTEGER DEFAULT 0,
                is_banned INTEGER DEFAULT 0,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                last_login DATETIME
            )",

            "CREATE TABLE IF NOT EXISTS themes (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT,
                accent TEXT,
                taskbar TEXT,
                window_border TEXT,
                font TEXT,
                is_default INTEGER DEFAULT 0
            )",

            "CREATE TABLE IF NOT EXISTS user_settings (
                user_id INTEGER,
                theme_id INTEGER
            )"
        ];

        $schema_mysql = [
            "CREATE TABLE IF NOT EXISTS users (
                id INT AUTO_INCREMENT PRIMARY KEY,
                username VARCHAR(255) UNIQUE NOT NULL,
                password_hash VARCHAR(255) NOT NULL,
                email VARCHAR(255),
                is_admin TINYINT DEFAULT 0,
                is_banned TINYINT DEFAULT 0,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                last_login DATETIME
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",

            "CREATE TABLE IF NOT EXISTS themes (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(255),
                accent VARCHAR(50),
                taskbar VARCHAR(50),
                window_border VARCHAR(50),
                font VARCHAR(255),
                is_default TINYINT DEFAULT 0
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",

            "CREATE TABLE IF NOT EXISTS user_settings (
                user_id INT,
                theme_id INT
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
        ];

        $schema = ($db_type === "sqlite") ? $schema_sqlite : $schema_mysql;

        foreach ($schema as $sql) {
            if ($db_type === "sqlite") {
                $db->exec($sql);
            } else {
                $db->query($sql);
            }
        }

        // Insert default theme
        $defaultThemeSQL = "
            INSERT INTO themes (name, accent, taskbar, window_border, font, is_default)
            VALUES ('Default', '#00ffff', 'rgba(0,0,0,0.6)', '#00ffff', 'Arial, sans-serif', 1)
        ";

        if ($db_type === "sqlite") {
            $db->exec($defaultThemeSQL);
        } else {
            $db->query($defaultThemeSQL);
        }

        // Insert admin user
        $hash = password_hash($admin_pass, PASSWORD_BCRYPT);

        if ($db_type === "sqlite") {
            $stmt = $db->prepare("INSERT INTO users (username, password_hash, email, is_admin)
                                  VALUES (?, ?, ?, 1)");
            $stmt->execute([$admin_user, $hash, $admin_email]);
        } else {
            $db->query("INSERT INTO users (username, password_hash, email, is_admin)
                        VALUES ('$admin_user', '$hash', '$admin_email', 1)");
        }

        // Create admin directory
        $admin_path = __DIR__ . "/$admin_dir";
        if (!is_dir($admin_path)) mkdir($admin_path, 0777, true);

        // Create viewer.php
        file_put_contents($admin_path . "/viewer.php", "<?php echo '<h1 style=\"color:#0ff;\">Admin Panel</h1>'; ?>");

        // Create lock file
        file_put_contents(__DIR__ . "/installed.lock", "installed");

        echo "<h2 style='color:#0ff;text-align:center;margin-top:50px;'>Installation Complete!</h2>
              <p style='text-align:center;color:#fff;'>Admin panel: <b>/$admin_dir/viewer.php</b></p>
              <p style='text-align:center;color:#aaa;'>Delete install.php now.</p>";
        exit;
    }
}
?>

<!DOCTYPE html>
<html>
<head>
<title>iDONTByTE Installer</title>
<style>
body {
    background: #0a0a0a;
    color: #0ff;
    font-family: 'Segoe UI', Arial;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}
#box {
    background: rgba(0,0,0,0.85);
    padding: 30px;
    width: 420px;
    border: 2px solid #00ffff;
    border-radius: 10px;
    box-shadow: 0 0 25px #00ffff;
}
input, select {
    width: 100%;
    padding: 10px;
    margin-bottom: 12px;
    background: #111;
    border: 1px solid #00ffff;
    color: #0ff;
}
button {
    width: 100%;
    padding: 12px;
    background: #00ffff;
    border: none;
    color: #000;
    font-weight: bold;
    cursor: pointer;
}
button:hover {
    background: #0ff;
}
label { color:#fff; }
</style>
</head>
<body>

<div id="box">
<h2 style="text-align:center;">iDONTByTE Installer</h2>

<form method="POST">

<h3>Admin Account</h3>
<input name="admin_user" placeholder="Admin Username">
<input name="admin_pass" placeholder="Admin Password">
<input name="admin_email" placeholder="Admin Email">

<h3>Admin Directory</h3>
<input name="admin_dir" placeholder="admin, panel, control">

<h3>Database Type</h3>
<select name="db_type" id="db_type" onchange="toggleMySQL()">
    <option value="sqlite">SQLite (recommended)</option>
    <option value="mysql">MySQL</option>
</select>

<div id="mysql_fields" style="display:none;">
    <h3>MySQL Settings</h3>
    <input name="mysql_host" placeholder="MySQL Host">
    <input name="mysql_user" placeholder="MySQL User">
    <input name="mysql_pass" placeholder="MySQL Password">
    <input name="mysql_name" placeholder="MySQL Database">
    <label><input type="checkbox" name="wipe_db"> Wipe existing database</label>
</div>

<button type="submit">Install</button>

</form>
</div>

<script>
function toggleMySQL() {
    document.getElementById('mysql_fields').style.display =
        document.getElementById('db_type').value === 'mysql' ? 'block' : 'none';
}
</script>

</body>
</html>