import { request, type ApiResponse } from './request'

export type ConsoleDataType = 'REALTIME' | 'STEP' | 'CYCLE'
export type ConsoleDataOperation = 'EDIT' | 'IMPORT' | 'DELETE'

export interface ConsoleDataOverride {
  overrideId: number
  testId: number
  dataType: ConsoleDataType
  stableIdentity: string
  fieldValues: string | null
  deleted: boolean
  actionId: number
  createdAtUtc: string
}

export interface ConsoleDataActionPayload {
  dataType: ConsoleDataType
  operationType: ConsoleDataOperation
  scopeSummary: string
  identitySummary: string
  changesSummary: string | null
  reason: string
  overrides: Array<{
    stableIdentity: string
    fieldValues: string | null
    deleted: boolean
  }>
  btsSampleIds?: number[]
  collectorSampleIds?: number[]
}

interface OverrideResponse extends ApiResponse { data: ConsoleDataOverride[] }
interface ActionResponse extends ApiResponse { actionId: number }

export async function getConsoleDataOverrides(testId: number, dataType: ConsoleDataType) {
  return (await request<OverrideResponse>(`/system/test/${testId}/console-data/${dataType}/overrides`)).data || []
}

export async function submitConsoleDataAction(testId: number, payload: ConsoleDataActionPayload) {
  return request<ActionResponse>(`/system/test/${testId}/console-data/actions`, {
    method: 'POST',
    body: JSON.stringify(payload),
  })
}
