<?php
/** Banco SQLite: usuários com o estado da assinatura embutido. */

require_once __DIR__ . '/config.php';

function db(): PDO {
    static $pdo = null;
    if ($pdo === null) {
        $pdo = new PDO('sqlite:' . DB_PATH);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->exec('PRAGMA journal_mode = WAL');
        $pdo->exec("
            CREATE TABLE IF NOT EXISTS usuarios (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                nome TEXT NOT NULL,
                email TEXT NOT NULL UNIQUE,
                senha_hash TEXT NOT NULL,
                mp_preapproval_id TEXT,
                sub_status TEXT NOT NULL DEFAULT 'nenhuma',
                sub_verificada_em TEXT,
                criado_em TEXT NOT NULL DEFAULT (datetime('now'))
            )
        ");
        // Colunas novas em bancos já criados (ALTER falha silenciosamente se existirem)
        foreach ([
            "ALTER TABLE usuarios ADD COLUMN reset_token TEXT",
            "ALTER TABLE usuarios ADD COLUMN reset_expira TEXT",
        ] as $sql) {
            try { $pdo->exec($sql); } catch (PDOException) { /* já existe */ }
        }
    }
    return $pdo;
}

function usuario_por_email(string $email): ?array {
    $st = db()->prepare('SELECT * FROM usuarios WHERE email = ?');
    $st->execute([mb_strtolower(trim($email))]);
    $u = $st->fetch(PDO::FETCH_ASSOC);
    return $u ?: null;
}

function usuario_por_id(int $id): ?array {
    $st = db()->prepare('SELECT * FROM usuarios WHERE id = ?');
    $st->execute([$id]);
    $u = $st->fetch(PDO::FETCH_ASSOC);
    return $u ?: null;
}

function assinatura_ativa(array $u): bool {
    // Período aberto: todo mundo logado conta como ativo (ver ACESSO_LIVRE).
    if (ACESSO_LIVRE) {
        return true;
    }
    return $u['sub_status'] === 'authorized';
}
