import type { GroupLogAction } from '@/lib/groups/groupLogActions'
import type { getDb } from '@/server/db'

type AppDb = Awaited<ReturnType<typeof getDb>>

export type InsertGroupLogInput = {
    groupId: string
    userId: string
    actionContent: GroupLogAction | string
    targetId?: string | null
    operationAt?: number
}

export async function insertGroupLog(db: AppDb, input: InsertGroupLogInput): Promise<void> {
    const groupId = String(input.groupId ?? '').trim()
    const userId = String(input.userId ?? '').trim()
    const actionContent = String(input.actionContent ?? '').trim()
    if (!groupId || !userId || !actionContent) return

    const targetId =
        input.targetId != null && String(input.targetId).trim()
            ? String(input.targetId).trim()
            : null
    const operationAt =
        typeof input.operationAt === 'number' && Number.isFinite(input.operationAt)
            ? Math.floor(input.operationAt)
            : Math.floor(Date.now() / 1000)

    await db.run(
        `INSERT INTO group_logs (group_id, user_id, target_id, action_content, operation_at)
         VALUES (?, ?, ?, ?, ?)`,
        [groupId, userId, targetId, actionContent, operationAt]
    )
}

/** 寫入日誌失敗不應影響主流程 */
export function logGroupAction(db: AppDb, input: InsertGroupLogInput): void {
    void insertGroupLog(db, input).catch((err) =>
        console.error('[group_logs] insert failed:', err)
    )
}
