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

export const sessions = sqliteTable(
  'sessions',
  {
    id: text('id').primaryKey(),
    title: text('title').notNull().default('New Session'),
    workspace: text('workspace').notNull().default(''),
    model: text('model').notNull().default('claude-sonnet-4-6'),
    status: text('status', { enum: ['active', 'archived'] }).notNull().default(SessionStatus.ACTIVE),
    permissionMode: text('permission_mode').notNull().default(''),
    backend: text('backend').notNull().default('claude'),
    userId: text('user_id').notNull().default(''),
    /** 外部用户 ID（→ external_users.id）。NULL = owner 自己的会话（桌面/cron/webhook）。 */
    externalUserId: text('external_user_id'),
    createdAt: text('created_at').notNull().default(sql`(datetime('now'))`),
    updatedAt: text('updated_at').notNull().default(sql`(datetime('now'))`),
  },
  (t) => ({
    externalUserIdx: index('idx_sessions_external_user').on(t.externalUserId, t.workspace, t.updatedAt),
    userStatusUpdatedIdx: index('idx_sessions_user_status_updated').on(t.userId, t.status, t.updatedAt),
  }),
)

export type Session = typeof sessions.$inferSelect
export type NewSession = typeof sessions.$inferInsert
