-- NOTE: DEPRECATED — These tables are defined but NOT consumed by any Rust code.
-- Kept for schema compatibility. Will be removed in a future cleanup pass.
-- See: V13 audit FIX-04

-- Webhook subscriptions: external endpoints that receive event notifications
CREATE TABLE IF NOT EXISTS webhook_subscriptions (
    id TEXT PRIMARY KEY,
    account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
    url TEXT NOT NULL,
    secret TEXT NOT NULL,  -- HMAC-SHA256 signing secret (hex-encoded)
    events TEXT[] NOT NULL DEFAULT '{}',  -- e.g. '{billing.payment.completed,agent.task.finished}'
    enabled BOOLEAN NOT NULL DEFAULT true,
    created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- Webhook delivery log: tracks each delivery attempt
CREATE TABLE IF NOT EXISTS webhook_deliveries (
    id TEXT PRIMARY KEY,
    subscription_id TEXT NOT NULL REFERENCES webhook_subscriptions(id) ON DELETE CASCADE,
    event TEXT NOT NULL,
    payload JSONB NOT NULL DEFAULT '{}',
    response_status INTEGER,
    response_body TEXT,
    attempts INTEGER NOT NULL DEFAULT 0,
    delivered_at TIMESTAMPTZ,
    created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_webhook_subscriptions_account ON webhook_subscriptions(account_id);
CREATE INDEX IF NOT EXISTS idx_webhook_subscriptions_events ON webhook_subscriptions USING gin(events);
CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_pending ON webhook_deliveries(subscription_id) WHERE delivered_at IS NULL;

-- === DOWN MIGRATION ===
-- DROP INDEX IF EXISTS idx_webhook_deliveries_pending;
-- DROP INDEX IF EXISTS idx_webhook_subscriptions_events;
-- DROP INDEX IF EXISTS idx_webhook_subscriptions_account;
-- DROP TABLE IF EXISTS webhook_deliveries;
-- DROP TABLE IF EXISTS webhook_subscriptions;
