import 'server-only'

import { createAdminClient } from '@/lib/supabase/admin'
import { safeOperationDetail, type OperationArea, type OperationDetail, type OperationOutcome } from '@/lib/domain/operation-log'

export interface OperationEventInput {
  area: OperationArea
  event: string
  outcome: OperationOutcome
  tripId?: string | null
  permitId?: string | null
  documentId?: string | null
  requestId?: string | null
  detail?: OperationDetail
}

/** Best-effort, server-only operational history; never blocks the workflow. */
export async function logOperationEvent(input: OperationEventInput): Promise<void> {
  const row = {
    area: input.area,
    event: input.event.slice(0, 100),
    outcome: input.outcome,
    trip_id: input.tripId ?? null,
    permit_id: input.permitId ?? null,
    document_id: input.documentId ?? null,
    request_id: input.requestId?.slice(0, 128) ?? null,
    detail: safeOperationDetail(input.detail),
  }
  try {
    const { error } = await createAdminClient().from('operation_events').insert(row)
    if (error) console.error('operation_events insert failed', { area: row.area, event: row.event, outcome: row.outcome, code: error.code })
  } catch (error) {
    console.error('operation_events unavailable', { area: row.area, event: row.event, outcome: row.outcome, type: error instanceof Error ? error.name : 'unknown' })
  }
}
