-- ============================================================
-- End-user & Bot Share Token Migration
-- 1. agent_user 增加 is_end_user 列（区分对外客户账号）
-- 2. 新增 agent_bot_share_tokens 表（一次性可吊销的 bot 对外访问凭证）
-- 注意：现有 bot_shares 表是 admin 之间的协作分享（viewer/editor），
-- 与本次"对外客户访问"语义无关，故新表另起名字避免冲突。
-- ============================================================

-- 1. agent_user 增加 is_end_user
ALTER TABLE agent_user
ADD COLUMN IF NOT EXISTS is_end_user BOOLEAN DEFAULT FALSE;

CREATE INDEX IF NOT EXISTS idx_agent_user_is_end_user
ON agent_user(is_end_user) WHERE is_end_user = TRUE;

COMMENT ON COLUMN agent_user.is_end_user IS '是否为对外客户账号（不可登录 admin 后台，仅能通过 share token 访问指定 bot）';

-- 2. agent_bot_share_tokens 表
CREATE TABLE IF NOT EXISTS agent_bot_share_tokens (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    bot_id UUID NOT NULL REFERENCES agent_bots(id) ON DELETE CASCADE,
    share_token VARCHAR(64) NOT NULL UNIQUE,
    name VARCHAR(255),
    created_by UUID NOT NULL REFERENCES agent_user(id) ON DELETE CASCADE,
    expires_at TIMESTAMP WITH TIME ZONE,
    revoked_at TIMESTAMP WITH TIME ZONE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_agent_bot_share_tokens_token
ON agent_bot_share_tokens(share_token);

CREATE INDEX IF NOT EXISTS idx_agent_bot_share_tokens_bot_id
ON agent_bot_share_tokens(bot_id);

CREATE INDEX IF NOT EXISTS idx_agent_bot_share_tokens_created_by
ON agent_bot_share_tokens(created_by);

COMMENT ON TABLE agent_bot_share_tokens IS 'bot 对外访问凭证：bot 主人生成 share_token，客户带 token 登录后访问对应 bot';
COMMENT ON COLUMN agent_bot_share_tokens.share_token IS '随机字符串，作为 URL path 的一部分';
COMMENT ON COLUMN agent_bot_share_tokens.expires_at IS '过期时间（NULL 表示永不过期，除非被吊销）';
COMMENT ON COLUMN agent_bot_share_tokens.revoked_at IS '吊销时间（非 NULL 表示已吊销）';
