// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;
using System.Linq;

namespace OpenAI.RealtimeConversation
{
    internal partial class InternalRealtimeResponseSession
    {
        internal IDictionary<string, BinaryData> SerializedAdditionalRawData { get; set; }
        internal InternalRealtimeResponseSession(string id, string model, IEnumerable<InternalRealtimeRequestSessionUpdateCommandSessionModality> modalities, string instructions, ConversationVoice voice, ConversationAudioFormat inputAudioFormat, ConversationAudioFormat outputAudioFormat, ConversationInputTranscriptionOptions inputAudioTranscription, ConversationTurnDetectionOptions turnDetection, IEnumerable<ConversationTool> tools, BinaryData toolChoice, float temperature, BinaryData maxResponseOutputTokens)
        {
            Argument.AssertNotNull(id, nameof(id));
            Argument.AssertNotNull(model, nameof(model));
            Argument.AssertNotNull(modalities, nameof(modalities));
            Argument.AssertNotNull(instructions, nameof(instructions));
            Argument.AssertNotNull(turnDetection, nameof(turnDetection));
            Argument.AssertNotNull(tools, nameof(tools));
            Argument.AssertNotNull(toolChoice, nameof(toolChoice));

            Id = id;
            Model = model;
            Modalities = modalities.ToList();
            Instructions = instructions;
            Voice = voice;
            InputAudioFormat = inputAudioFormat;
            OutputAudioFormat = outputAudioFormat;
            InputAudioTranscription = inputAudioTranscription;
            TurnDetection = turnDetection;
            Tools = tools.ToList();
            ToolChoice = toolChoice;
            Temperature = temperature;
            _maxResponseOutputTokens = maxResponseOutputTokens;
        }

        internal InternalRealtimeResponseSession(InternalRealtimeResponseSessionObject @object, string id, string model, IReadOnlyList<InternalRealtimeRequestSessionUpdateCommandSessionModality> modalities, string instructions, ConversationVoice voice, ConversationAudioFormat inputAudioFormat, ConversationAudioFormat outputAudioFormat, ConversationInputTranscriptionOptions inputAudioTranscription, ConversationTurnDetectionOptions turnDetection, IReadOnlyList<ConversationTool> tools, BinaryData toolChoice, float temperature, BinaryData maxResponseOutputTokens, IDictionary<string, BinaryData> serializedAdditionalRawData)
        {
            Object = @object;
            Id = id;
            Model = model;
            Modalities = modalities;
            Instructions = instructions;
            Voice = voice;
            InputAudioFormat = inputAudioFormat;
            OutputAudioFormat = outputAudioFormat;
            InputAudioTranscription = inputAudioTranscription;
            TurnDetection = turnDetection;
            Tools = tools;
            ToolChoice = toolChoice;
            Temperature = temperature;
            _maxResponseOutputTokens = maxResponseOutputTokens;
            SerializedAdditionalRawData = serializedAdditionalRawData;
        }

        internal InternalRealtimeResponseSession()
        {
        }

        public InternalRealtimeResponseSessionObject Object { get; } = InternalRealtimeResponseSessionObject.RealtimeSession;

        public string Id { get; }
        public string Model { get; }
        public IReadOnlyList<InternalRealtimeRequestSessionUpdateCommandSessionModality> Modalities { get; }
        public string Instructions { get; }
        public ConversationVoice Voice { get; }
        public ConversationAudioFormat InputAudioFormat { get; }
        public ConversationAudioFormat OutputAudioFormat { get; }
        public ConversationInputTranscriptionOptions InputAudioTranscription { get; }
        public ConversationTurnDetectionOptions TurnDetection { get; }
        public IReadOnlyList<ConversationTool> Tools { get; }
        public BinaryData ToolChoice { get; }
        public float Temperature { get; }
    }
}
