-- Migration: Free-tier cost routing (Task #27)
-- Adds generosity pool store, grant audit log, and free-tier tracking columns.

-- ── timmy_config ─────────────────────────────────────────────────────────────
-- Key/value store for Timmy's internal config (e.g. generosity_pool_sats).

CREATE TABLE IF NOT EXISTS timmy_config (
  key         TEXT PRIMARY KEY,
  value       TEXT NOT NULL,
  updated_at  TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- ── nostr_identities: free-tier absorption columns ───────────────────────────
-- Rolling daily budget: how many sats Timmy has subsidised for this identity
-- today; resets when absorbed_reset_at is older than 24 h.

ALTER TABLE nostr_identities
  ADD COLUMN IF NOT EXISTS sats_absorbed_today INTEGER NOT NULL DEFAULT 0,
  ADD COLUMN IF NOT EXISTS absorbed_reset_at   TIMESTAMPTZ NOT NULL DEFAULT NOW();

-- ── jobs: free-tier tracking columns ─────────────────────────────────────────
-- free_tier=TRUE  → Timmy absorbed part or all of this job's cost from the pool.
-- absorbed_sats   → how many sats Timmy absorbed (NULL or 0 for fully-paid jobs).

ALTER TABLE jobs
  ADD COLUMN IF NOT EXISTS free_tier      BOOLEAN  NOT NULL DEFAULT FALSE,
  ADD COLUMN IF NOT EXISTS absorbed_sats  INTEGER;

-- ── sessions: nostr identity FK ──────────────────────────────────────────────
-- Added in task #26; included here for completeness in migration-driven deploys.

ALTER TABLE sessions
  ADD COLUMN IF NOT EXISTS nostr_pubkey TEXT
    REFERENCES nostr_identities(pubkey);

-- ── free_tier_grants ─────────────────────────────────────────────────────────
-- Audit log: one row each time Timmy absorbs cost on behalf of an identity.

CREATE TABLE IF NOT EXISTS free_tier_grants (
  id                  TEXT PRIMARY KEY,
  pubkey              TEXT NOT NULL REFERENCES nostr_identities(pubkey),
  request_hash        TEXT NOT NULL,
  sats_absorbed       INTEGER NOT NULL,
  pool_balance_after  INTEGER NOT NULL,
  created_at          TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_free_tier_grants_pubkey
  ON free_tier_grants(pubkey);
