<?php
// db.php — SQLite connection and auto-setup

define('DB_PATH', __DIR__ . '/data/clubhouse.sqlite');

function get_db(): PDO {
    static $pdo = null;
    if ($pdo !== null) return $pdo;

    $dir = dirname(DB_PATH);
    if (!is_dir($dir)) {
        mkdir($dir, 0755, true);
    }

    $pdo = new PDO('sqlite:' . DB_PATH);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $pdo->exec('PRAGMA journal_mode=WAL');
    $pdo->exec('PRAGMA foreign_keys=ON');

    init_schema($pdo);
    return $pdo;
}

function init_schema(PDO $pdo): void {
    $pdo->exec("
        CREATE TABLE IF NOT EXISTS players (
            id          INTEGER PRIMARY KEY AUTOINCREMENT,
            session_id  TEXT NOT NULL UNIQUE,
            name        TEXT NOT NULL,
            avatar_seed TEXT NOT NULL,
            bankroll    INTEGER NOT NULL DEFAULT 1000,
            created_at  DATETIME DEFAULT CURRENT_TIMESTAMP,
            updated_at  DATETIME DEFAULT CURRENT_TIMESTAMP
        );

        CREATE TABLE IF NOT EXISTS stats (
            id              INTEGER PRIMARY KEY AUTOINCREMENT,
            player_id       INTEGER NOT NULL UNIQUE REFERENCES players(id),
            wins            INTEGER NOT NULL DEFAULT 0,
            losses          INTEGER NOT NULL DEFAULT 0,
            pushes          INTEGER NOT NULL DEFAULT 0,
            blackjacks      INTEGER NOT NULL DEFAULT 0,
            profit          INTEGER NOT NULL DEFAULT 0,
            current_streak  INTEGER NOT NULL DEFAULT 0,
            streak_type     TEXT NOT NULL DEFAULT '',
            longest_win     INTEGER NOT NULL DEFAULT 0,
            longest_loss    INTEGER NOT NULL DEFAULT 0
        );

        CREATE TABLE IF NOT EXISTS hands (
            id              INTEGER PRIMARY KEY AUTOINCREMENT,
            player_id       INTEGER NOT NULL REFERENCES players(id),
            player_cards    TEXT NOT NULL,
            dealer_cards    TEXT NOT NULL,
            bet             INTEGER NOT NULL,
            side_bets       TEXT NOT NULL DEFAULT '{}',
            outcome         TEXT NOT NULL,
            payout          INTEGER NOT NULL DEFAULT 0,
            profit          INTEGER NOT NULL DEFAULT 0,
            played_at       DATETIME DEFAULT CURRENT_TIMESTAMP
        );
    ");
}

function json_response(array $data, int $code = 200): void {
    http_response_code($code);
    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}

function json_error(string $message, int $code = 400): void {
    json_response(['error' => $message], $code);
}

function get_input(): array {
    $raw = file_get_contents('php://input');
    return $raw ? (json_decode($raw, true) ?? []) : [];
}
