/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import * as z from "zod/v3";
import { remap as remap$ } from "../../lib/primitives.js";
import {
  CreateWorkspaceUploadRequestAssignment,
  CreateWorkspaceUploadRequestAssignment$Outbound,
  CreateWorkspaceUploadRequestAssignment$outboundSchema,
} from "./createworkspaceuploadrequestassignment.js";
import {
  WorkspaceUploadRequestStatus,
  WorkspaceUploadRequestStatus$outboundSchema,
} from "./workspaceuploadrequeststatus.js";

export type CreateWorkspaceUploadRequestBody = {
  /**
   * The name of the upload request
   */
  name: string | null;
  /**
   * The description of the upload request
   */
  description: string | null;
  /**
   * The due date for the upload request
   */
  dueDate: Date;
  /**
   * List of user assignments for the upload request
   */
  assignments: Array<CreateWorkspaceUploadRequestAssignment> | null;
  /**
   * Enum representing the status of a workspace upload request
   */
  status: WorkspaceUploadRequestStatus;
};

/** @internal */
export type CreateWorkspaceUploadRequestBody$Outbound = {
  name: string | null;
  description: string | null;
  due_date: string;
  assignments: Array<CreateWorkspaceUploadRequestAssignment$Outbound> | null;
  status: string;
};

/** @internal */
export const CreateWorkspaceUploadRequestBody$outboundSchema: z.ZodType<
  CreateWorkspaceUploadRequestBody$Outbound,
  z.ZodTypeDef,
  CreateWorkspaceUploadRequestBody
> = z.object({
  name: z.nullable(z.string()),
  description: z.nullable(z.string()),
  dueDate: z.date().transform(v => v.toISOString()),
  assignments: z.nullable(
    z.array(CreateWorkspaceUploadRequestAssignment$outboundSchema),
  ),
  status: WorkspaceUploadRequestStatus$outboundSchema,
}).transform((v) => {
  return remap$(v, {
    dueDate: "due_date",
  });
});

export function createWorkspaceUploadRequestBodyToJSON(
  createWorkspaceUploadRequestBody: CreateWorkspaceUploadRequestBody,
): string {
  return JSON.stringify(
    CreateWorkspaceUploadRequestBody$outboundSchema.parse(
      createWorkspaceUploadRequestBody,
    ),
  );
}
