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

/**
 * 外部身份关联表。
 *
 * 类比 Better-Auth 的 account 表：一个 external_user 可关联多个 external_identity。
 * 每行 = 某渠道下的一个平台账号 → external_user 的映射。
 *
 * channelType 取值：
 *   'im:feishu' | 'im:telegram' | 'im:discord' | 'im:weixin' | 'im:wecom' | 'im:dingtalk'
 *   'h5' | 'wxapp'
 *
 * channelId：渠道配置 ID（im_channels.id / h5_pages.id / wxapp_configs.id），IM 用，H5/小程序可空。
 */
export const externalIdentities = sqliteTable(
  'external_identities',
  {
    id: text('id').primaryKey(),
    externalUserId: text('external_user_id').notNull(),
    channelType: text('channel_type').notNull(),
    channelId: text('channel_id').notNull().default(''),
    /** 平台原始 ID：飞书 open_id / tg user_id / wxapp openid / H5 app_sub */
    platformUserId: text('platform_user_id').notNull(),
    platformName: text('platform_name').notNull().default(''),
    platformAvatar: text('platform_avatar').notNull().default(''),
    linkedAt: text('linked_at').notNull().default(sql`(datetime('now'))`),
    updatedAt: text('updated_at').notNull().default(sql`(datetime('now'))`),
  },
  (t) => ({
    userIdx: index('idx_ext_identities_user').on(t.externalUserId),
    /** 身份查找：同一渠道+配置下平台 ID 唯一 */
    lookupUnique: uniqueIndex('idx_ext_identities_lookup').on(t.channelType, t.channelId, t.platformUserId),
  }),
)

export type ExternalIdentity = typeof externalIdentities.$inferSelect
export type NewExternalIdentity = typeof externalIdentities.$inferInsert
