import { sqliteTable, text, integer, index } from 'drizzle-orm/sqlite-core'
import { sql } from 'drizzle-orm'
import { ImChannelStatus } from '../../shared/enums'

export const imChannels = sqliteTable('im_channels', {
  id: text('id').primaryKey(),
  type: text('type', {
    enum: ['feishu', 'telegram', 'discord', 'weixin', 'dingtalk', 'wecom'],
  }).notNull(),
  name: text('name').notNull().default(''),
  enabled: integer('enabled').notNull().default(0),
  status: text('status', {
    enum: ['connected', 'disconnected', 'not_configured', 'error'],
  }).notNull().default(ImChannelStatus.NOT_CONFIGURED),
  credentials: text('credentials').notNull().default('{}'),
  defaultWorkspaceId: text('default_workspace_id').notNull().default(''),
  defaultModel: text('default_model').notNull().default(''),
  dmPolicy: text('dm_policy').notNull().default('open'),
  groupPolicy: text('group_policy').notNull().default('open'),
  triggerMode: text('trigger_mode').notNull().default('mention'),
  groupWhitelist: text('group_whitelist').notNull().default('[]'),
  senderWhitelist: text('sender_whitelist').notNull().default('[]'),
  ownerUserId: text('owner_user_id').notNull().default(''),
  createdAt: text('created_at').notNull().default(sql`(datetime('now'))`),
  updatedAt: text('updated_at').notNull().default(sql`(datetime('now'))`),
})

export type ImChannel = typeof imChannels.$inferSelect
export type NewImChannel = typeof imChannels.$inferInsert
