/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 * @generated-id: 49d94b5646c9
 */

import * as z from "zod/v3";
import { remap as remap$ } from "../../lib/primitives.js";
import { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";

export type ExtraFields =
  | boolean
  | number
  | number
  | string
  | Date
  | Array<string>;

export type ChatCompletionEventPreview = {
  eventId: string;
  correlationId: string;
  createdAt: Date;
  extraFields: {
    [k: string]:
      | boolean
      | number
      | number
      | string
      | Date
      | Array<string>
      | null;
  };
  nbInputTokens: number;
  nbOutputTokens: number;
};

/** @internal */
export const ExtraFields$inboundSchema: z.ZodType<
  ExtraFields,
  z.ZodTypeDef,
  unknown
> = z.union([
  z.boolean(),
  z.number().int(),
  z.number(),
  z.string(),
  z.string().datetime({ offset: true }).transform(v => new Date(v)),
  z.array(z.string()),
]);

export function extraFieldsFromJSON(
  jsonString: string,
): SafeParseResult<ExtraFields, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ExtraFields$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ExtraFields' from JSON`,
  );
}

/** @internal */
export const ChatCompletionEventPreview$inboundSchema: z.ZodType<
  ChatCompletionEventPreview,
  z.ZodTypeDef,
  unknown
> = z.object({
  event_id: z.string(),
  correlation_id: z.string(),
  created_at: z.string().datetime({ offset: true }).transform(v => new Date(v)),
  extra_fields: z.record(
    z.nullable(
      z.union([
        z.boolean(),
        z.number().int(),
        z.number(),
        z.string(),
        z.string().datetime({ offset: true }).transform(v => new Date(v)),
        z.array(z.string()),
      ]),
    ),
  ),
  nb_input_tokens: z.number().int(),
  nb_output_tokens: z.number().int(),
}).transform((v) => {
  return remap$(v, {
    "event_id": "eventId",
    "correlation_id": "correlationId",
    "created_at": "createdAt",
    "extra_fields": "extraFields",
    "nb_input_tokens": "nbInputTokens",
    "nb_output_tokens": "nbOutputTokens",
  });
});

export function chatCompletionEventPreviewFromJSON(
  jsonString: string,
): SafeParseResult<ChatCompletionEventPreview, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ChatCompletionEventPreview$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ChatCompletionEventPreview' from JSON`,
  );
}
