/**
 * Tuyau type strictement chaque code de statut possible d'une route. Quand
 * on `assertStatus(...)` puis on lit `.body()`, TS ne narrow pas — il garde
 * l'union.
 *
 * Ce helper sert juste à caster `.body()` vers la forme attendue dans le
 * contexte du test, sans perdre la lisibilité du `.data` / `.errors`.
 */
export function body<T>(response: { body(): unknown }): T {
  return response.body() as T
}

export type ApiOk<T> = { data: T }
export type ApiOkPaged<T> = { data: T; meta: { total: number; page: number } }
export type ApiError = {
  errors: Array<{ code: string; message: string; field?: string }>
}
export type ApiConflict<T> = ApiError & { existing: T }
