import type { Querier } from '@platform-modules/db'
import { and, eq } from 'drizzle-orm'
import { supportMessages } from './schema.js'
import type { HelpdeskSchema } from './schema.js'
import type { ParentKey, PostMessageInput, SupportMessage } from './types.js'

export async function postMessage<S extends HelpdeskSchema>(
  tx: Querier<S>,
  key: ParentKey,
  input: PostMessageInput,
): Promise<SupportMessage> {
  const [row] = await tx
    .insert(supportMessages)
    .values({
      parentType: key.parentType,
      parentId: key.parentId,
      authorType: input.authorType,
      body: input.body,
      visibility: input.visibility ?? null,
    })
    .returning()

  if (!row) {
    throw new Error('postMessage: insert returned no row')
  }

  return row
}

export async function listMessages<S extends HelpdeskSchema>(
  tx: Querier<S>,
  key: ParentKey,
): Promise<SupportMessage[]> {
  return tx
    .select()
    .from(supportMessages)
    .where(
      and(
        eq(supportMessages.parentType, key.parentType),
        eq(supportMessages.parentId, key.parentId),
      ),
    )
}
