import { getDb } from '../client'
import { wxappTokens } from '../schema'
import { eq } from 'drizzle-orm'
import { nowExpr } from '../shared/dialect-helpers'

/**
 * Wxapp Token Repository（@reserved — 设计预留，路由未实现）。
 *
 * 类比 Better-Auth 的 session 表，封装 wxapp_tokens 表的基础 CRUD。
 * 后期实现小程序认证路由时直接使用。
 */

export const wxappTokenRepo = {
  /** 按 token 查（Bearer token 校验用） */
  findByToken(token: string) {
    return getDb().select().from(wxappTokens).where(eq(wxappTokens.token, token)).get()
  },

  /** 按 external_user_id + workspace 查 */
  findByExternalUserAndWorkspace(externalUserId: string, workspaceId: string) {
    return getDb()
      .select()
      .from(wxappTokens)
      .where(eq(wxappTokens.externalUserId, externalUserId))
      .all()
      .filter((t) => t.workspaceId === workspaceId)
  },

  /** 创建 token */
  create(data: {
    id: string
    token: string
    externalUserId: string
    workspaceId: string
    openid: string
    expiresAt: string
  }) {
    getDb()
      .insert(wxappTokens)
      .values({
        id: data.id,
        token: data.token,
        externalUserId: data.externalUserId,
        workspaceId: data.workspaceId,
        openid: data.openid,
        expiresAt: data.expiresAt,
      })
      .run()
    return this.findByToken(data.token)
  },

  /** 删除 token（吊销） */
  deleteByToken(token: string) {
    getDb().delete(wxappTokens).where(eq(wxappTokens.token, token)).run()
  },

  /** 删除过期 token（清理用） */
  deleteExpired(currentIsoTime: string) {
    getDb()
      .delete(wxappTokens)
      .where(eq(wxappTokens.expiresAt, currentIsoTime))
      .run()
  },
}
