// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;

namespace OpenAI.Batch
{
    internal partial class InternalBatchJob
    {
        private protected IDictionary<string, BinaryData> _additionalBinaryDataProperties;

        internal InternalBatchJob(string id, string endpoint, string inputFileId, string completionWindow, InternalBatchStatus status, DateTimeOffset createdAt, IDictionary<string, string> metadata)
        {
            Id = id;
            Endpoint = endpoint;
            InputFileId = inputFileId;
            CompletionWindow = completionWindow;
            Status = status;
            CreatedAt = createdAt;
            Metadata = metadata;
        }

        internal InternalBatchJob(string id, InternalBatchObject @object, string endpoint, InternalBatchErrors errors, string inputFileId, string completionWindow, InternalBatchStatus status, string outputFileId, string errorFileId, DateTimeOffset createdAt, DateTimeOffset? inProgressAt, DateTimeOffset? expiresAt, DateTimeOffset? finalizingAt, DateTimeOffset? completedAt, DateTimeOffset? failedAt, DateTimeOffset? expiredAt, DateTimeOffset? cancellingAt, DateTimeOffset? cancelledAt, InternalBatchRequestCounts requestCounts, IDictionary<string, string> metadata, IDictionary<string, BinaryData> additionalBinaryDataProperties)
        {
            Id = id;
            Object = @object;
            Endpoint = endpoint;
            Errors = errors;
            InputFileId = inputFileId;
            CompletionWindow = completionWindow;
            Status = status;
            OutputFileId = outputFileId;
            ErrorFileId = errorFileId;
            CreatedAt = createdAt;
            InProgressAt = inProgressAt;
            ExpiresAt = expiresAt;
            FinalizingAt = finalizingAt;
            CompletedAt = completedAt;
            FailedAt = failedAt;
            ExpiredAt = expiredAt;
            CancellingAt = cancellingAt;
            CancelledAt = cancelledAt;
            RequestCounts = requestCounts;
            Metadata = metadata;
            _additionalBinaryDataProperties = additionalBinaryDataProperties;
        }

        public string Id { get; }

        public InternalBatchObject Object { get; } = "batch";

        public string Endpoint { get; }

        public InternalBatchErrors Errors { get; }

        public string InputFileId { get; }

        public string CompletionWindow { get; }

        public InternalBatchStatus Status { get; }

        public string OutputFileId { get; }

        public string ErrorFileId { get; }

        public DateTimeOffset CreatedAt { get; }

        public DateTimeOffset? InProgressAt { get; }

        public DateTimeOffset? ExpiresAt { get; }

        public DateTimeOffset? FinalizingAt { get; }

        public DateTimeOffset? CompletedAt { get; }

        public DateTimeOffset? FailedAt { get; }

        public DateTimeOffset? ExpiredAt { get; }

        public DateTimeOffset? CancellingAt { get; }

        public DateTimeOffset? CancelledAt { get; }

        public InternalBatchRequestCounts RequestCounts { get; }

        public IDictionary<string, string> Metadata { get; }

        internal IDictionary<string, BinaryData> SerializedAdditionalRawData
        {
            get => _additionalBinaryDataProperties;
            set => _additionalBinaryDataProperties = value;
        }
    }
}
