-- cdrop MVP schema (PROJECT_BRIEF.md §4)
-- 以 IF NOT EXISTS 形式由 internal/db/bootstrap.go 启动期单事务执行。

CREATE TABLE IF NOT EXISTS devices (
    user_id   TEXT NOT NULL,
    name      TEXT NOT NULL,
    type      TEXT NOT NULL,
    last_seen INTEGER NOT NULL,
    PRIMARY KEY (user_id, name)
);

CREATE TABLE IF NOT EXISTS shortcut_tokens (
    jti          TEXT PRIMARY KEY,
    user_id      TEXT NOT NULL,
    label        TEXT NOT NULL,
    scopes       TEXT NOT NULL,
    created_at   INTEGER NOT NULL,
    expires_at   INTEGER NOT NULL,
    last_used_at INTEGER,
    revoked      INTEGER NOT NULL DEFAULT 0
);

CREATE TABLE IF NOT EXISTS transfer_sessions (
    id                TEXT PRIMARY KEY,
    user_id           TEXT NOT NULL,
    sender_name       TEXT NOT NULL,
    receiver_name     TEXT NOT NULL,
    state             TEXT NOT NULL,
    mode              TEXT,
    file_name         TEXT NOT NULL,
    file_size         INTEGER NOT NULL,
    file_sha256       TEXT,
    bytes_transferred INTEGER NOT NULL DEFAULT 0,
    created_at        INTEGER NOT NULL,
    finished_at       INTEGER,
    fail_reason       TEXT
);

CREATE TABLE IF NOT EXISTS clipboard_state (
    user_id       TEXT PRIMARY KEY,
    content_type  TEXT NOT NULL,
    content       TEXT,
    source_device TEXT,
    updated_at    INTEGER NOT NULL,
    -- version 是每用户严格单调递增的版本号（每次写 +1），变更探测 / ETag 用；
    -- updated_at 仍是墙钟（TTL / 展示）。既有库由 bootstrap 的幂等 ALTER 补列。
    version       INTEGER NOT NULL DEFAULT 0,
    -- origin_ts 是内容在源设备被复制的时刻（ms）。冲突收敛按它做 LWW——写入仅在
    -- origin_ts 严格大于现存时被接受，故延迟/乱序到达的旧复制不会盖掉新的。
    origin_ts     INTEGER NOT NULL DEFAULT 0
);
