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

/**
 * H5 分享页面配置表（一 workspace 一个 H5 页面）。
 *
 * 与 im_channels 同构：一行 = 一个渠道配置，绑一个 workspace。
 * APP 凭证存 app_secrets JSON（{app_id: {name, secret}}），类比 im_channels.credentials。
 *
 * 关键约束：workspace_id UNIQUE —— 一 workspace 仅一个 H5 页面。
 * owner_user_id 不在此表冗余，由 workspace_id → workspaces.owner_user_id 反查。
 */
export const h5Pages = sqliteTable(
  'h5_pages',
  {
    id: text('id').primaryKey(),
    workspaceId: text('workspace_id').notNull().unique(),
    slug: text('slug').notNull().unique(),
    // JSON: {"com.peiban.app":{"name":"陪伴 APP","secret":"sk_xxx"}}
    appSecrets: text('app_secrets').notNull().default('{}'),
    defaultModel: text('default_model').notNull().default(''),
    permissionMode: text('permission_mode', {
      enum: ['confirm', 'full'],
    }).notNull().default('full'),
    // H5 分享页面展示信息：名称、简介、首次/新建会话引导语、图标
    pageTitle: text('page_title').notNull().default(''),
    // 助手/方案名称：仅用于欢迎区域（欢迎卡标题、profile「你好，我是」、monogram、图片 alt）。
    // 为空时由前端 fallback 到 pageTitle，保证旧数据零破坏。
    assistantName: text('assistant_name').notNull().default(''),
    description: text('description').notNull().default(''),
    welcomeMessage: text('welcome_message').notNull().default(''),
    iconEmoji: text('icon_emoji').notNull().default(''),
    enabled: integer('enabled').notNull().default(1),
    createdAt: text('created_at').notNull().default(sql`(datetime('now'))`),
    updatedAt: text('updated_at').notNull().default(sql`(datetime('now'))`),
  },
  (t) => ({
    slugIdx: uniqueIndex('idx_h5_pages_slug').on(t.slug),
    workspaceIdx: index('idx_h5_pages_workspace').on(t.workspaceId),
  }),
)

export type H5Page = typeof h5Pages.$inferSelect
export type NewH5Page = typeof h5Pages.$inferInsert
