import { sqliteTable, text, uniqueIndex, index } from 'drizzle-orm/sqlite-core'
import { sql } from 'drizzle-orm'

/**
 * 微信小程序 token 管理表（@reserved — 设计预留，路由未实现）。
 *
 * 类似 Better-Auth 的 session 表，但面向外部用户。
 * Bearer token → external_user_id 映射，支持即时吊销。
 */
export const wxappTokens = sqliteTable(
  'wxapp_tokens',
  {
    id: text('id').primaryKey(),
    token: text('token').notNull().unique(),
    externalUserId: text('external_user_id').notNull(),
    workspaceId: text('workspace_id').notNull(),
    openid: text('openid').notNull(),
    expiresAt: text('expires_at').notNull(),
    createdAt: text('created_at').notNull().default(sql`(datetime('now'))`),
    updatedAt: text('updated_at').notNull().default(sql`(datetime('now'))`),
  },
  (t) => ({
    userWorkspaceIdx: index('idx_wxapp_tokens_user').on(t.externalUserId, t.workspaceId),
    expiryIdx: index('idx_wxapp_tokens_expiry').on(t.expiresAt),
  }),
)

export type WxappToken = typeof wxappTokens.$inferSelect
export type NewWxappToken = typeof wxappTokens.$inferInsert
