/*
 * 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 { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import * as types from "../../types/primitives.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import {
  WorkspaceUploadRequestAssignment,
  WorkspaceUploadRequestAssignment$inboundSchema,
} from "./workspaceuploadrequestassignment.js";
import {
  WorkspaceUploadRequestDocument,
  WorkspaceUploadRequestDocument$inboundSchema,
} from "./workspaceuploadrequestdocument.js";
import {
  WorkspaceUploadRequestOwner,
  WorkspaceUploadRequestOwner$inboundSchema,
} from "./workspaceuploadrequestowner.js";
import {
  WorkspaceUploadRequestStatus,
  WorkspaceUploadRequestStatus$inboundSchema,
} from "./workspaceuploadrequeststatus.js";

/**
 * Upload request details - single upload request response
 */
export type GetWorkspaceUploadRequestResponse = {
  /**
   * The ID of the upload request
   */
  uploadRequestId: string;
  /**
   * The ID of the workspace
   */
  workspaceId: string;
  /**
   * The name of the upload request
   */
  name: string | null;
  /**
   * The description of the upload request
   */
  description?: string | null | undefined;
  uploadRequestOwner: WorkspaceUploadRequestOwner;
  /**
   * Enum representing the status of a workspace upload request
   */
  status: WorkspaceUploadRequestStatus;
  /**
   * List of documents associated with the upload request
   */
  documents: Array<WorkspaceUploadRequestDocument> | null;
  /**
   * List of user assignments for the upload request
   */
  assignments: Array<WorkspaceUploadRequestAssignment> | null;
  /**
   * The date the upload request was created
   */
  createdDate: Date | null;
  /**
   * The date the upload request was last updated
   */
  updatedDate: Date | null;
  /**
   * The due date for the upload request
   */
  dueDate?: Date | null | undefined;
  /**
   * The date the upload request was sent
   */
  sentDate?: Date | null | undefined;
  /**
   * The date the upload request was completed
   */
  completedDate?: Date | null | undefined;
  /**
   * Whether the current user can view the upload request
   */
  canView: boolean;
  /**
   * Whether the current user can edit the upload request
   */
  canEdit: boolean;
  /**
   * Whether the current user can delete the upload request
   */
  canDelete: boolean;
};

/** @internal */
export const GetWorkspaceUploadRequestResponse$inboundSchema: z.ZodType<
  GetWorkspaceUploadRequestResponse,
  z.ZodTypeDef,
  unknown
> = z.object({
  upload_request_id: types.string(),
  workspace_id: types.string(),
  name: types.nullable(types.string()),
  description: z.nullable(types.string()).optional(),
  upload_request_owner: WorkspaceUploadRequestOwner$inboundSchema,
  status: WorkspaceUploadRequestStatus$inboundSchema,
  documents: types.nullable(
    z.array(WorkspaceUploadRequestDocument$inboundSchema),
  ),
  assignments: types.nullable(
    z.array(WorkspaceUploadRequestAssignment$inboundSchema),
  ),
  created_date: types.nullable(types.date()),
  updated_date: types.nullable(types.date()),
  due_date: z.nullable(types.date()).optional(),
  sent_date: z.nullable(types.date()).optional(),
  completed_date: z.nullable(types.date()).optional(),
  can_view: types.boolean(),
  can_edit: types.boolean(),
  can_delete: types.boolean(),
}).transform((v) => {
  return remap$(v, {
    "upload_request_id": "uploadRequestId",
    "workspace_id": "workspaceId",
    "upload_request_owner": "uploadRequestOwner",
    "created_date": "createdDate",
    "updated_date": "updatedDate",
    "due_date": "dueDate",
    "sent_date": "sentDate",
    "completed_date": "completedDate",
    "can_view": "canView",
    "can_edit": "canEdit",
    "can_delete": "canDelete",
  });
});

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