-- Topic subsystem schema (SQLite)
-- Apply manually before/after backend deployment if needed.

BEGIN TRANSACTION;

CREATE TABLE IF NOT EXISTS topic_topic (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    bot_id TEXT NOT NULL,
    topic_key TEXT NOT NULL,
    name TEXT NOT NULL DEFAULT '',
    description TEXT NOT NULL DEFAULT '',
    is_active INTEGER NOT NULL DEFAULT 1,
    is_default_fallback INTEGER NOT NULL DEFAULT 0,
    routing_json TEXT NOT NULL DEFAULT '{}',
    view_schema_json TEXT NOT NULL DEFAULT '{}',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY(bot_id) REFERENCES bot_instance(id)
);

CREATE TABLE IF NOT EXISTS topic_item (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    bot_id TEXT NOT NULL,
    topic_key TEXT NOT NULL,
    title TEXT NOT NULL DEFAULT '',
    content TEXT NOT NULL DEFAULT '',
    level TEXT NOT NULL DEFAULT 'info',
    tags_json TEXT,
    view_json TEXT,
    source TEXT NOT NULL DEFAULT 'mcp',
    dedupe_key TEXT,
    is_read INTEGER NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY(bot_id) REFERENCES bot_instance(id)
);

CREATE UNIQUE INDEX IF NOT EXISTS uq_topic_topic_bot_topic_key
ON topic_topic(bot_id, topic_key);

CREATE INDEX IF NOT EXISTS idx_topic_topic_bot_id
ON topic_topic(bot_id);

CREATE INDEX IF NOT EXISTS idx_topic_topic_topic_key
ON topic_topic(topic_key);

CREATE INDEX IF NOT EXISTS idx_topic_topic_bot_fallback
ON topic_topic(bot_id, is_default_fallback);

CREATE INDEX IF NOT EXISTS idx_topic_item_bot_id
ON topic_item(bot_id);

CREATE INDEX IF NOT EXISTS idx_topic_item_topic_key
ON topic_item(topic_key);

CREATE INDEX IF NOT EXISTS idx_topic_item_level
ON topic_item(level);

CREATE INDEX IF NOT EXISTS idx_topic_item_source
ON topic_item(source);

CREATE INDEX IF NOT EXISTS idx_topic_item_is_read
ON topic_item(is_read);

CREATE INDEX IF NOT EXISTS idx_topic_item_created_at
ON topic_item(created_at);

CREATE INDEX IF NOT EXISTS idx_topic_item_bot_topic_created_at
ON topic_item(bot_id, topic_key, created_at);

CREATE INDEX IF NOT EXISTS idx_topic_item_bot_dedupe
ON topic_item(bot_id, dedupe_key);

COMMIT;
