// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;
using OpenAI;
using OpenAI.Internal;

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

        internal InternalRealtimeSessionCreateResponse(InternalRealtimeSessionCreateResponseClientSecret clientSecret)
        {
            ClientSecret = clientSecret;
            Modalities = new ChangeTrackingList<InternalRealtimeRequestSessionModality>();
            Tools = new ChangeTrackingList<ConversationTool>();
        }

        internal InternalRealtimeSessionCreateResponse(InternalRealtimeSessionCreateResponseClientSecret clientSecret, IList<InternalRealtimeRequestSessionModality> modalities, string instructions, InternalVoiceIdsShared? voice, RealtimeAudioFormat? inputAudioFormat, RealtimeAudioFormat? outputAudioFormat, InternalRealtimeSessionCreateResponseInputAudioTranscription inputAudioTranscription, float? speed, BinaryData tracing, InternalRealtimeSessionCreateResponseTurnDetection turnDetection, IList<ConversationTool> tools, string toolChoice, float? temperature, BinaryData maxResponseOutputTokens, IDictionary<string, BinaryData> additionalBinaryDataProperties)
        {
            // Plugin customization: ensure initialization of collections
            ClientSecret = clientSecret;
            Modalities = modalities ?? new ChangeTrackingList<InternalRealtimeRequestSessionModality>();
            Instructions = instructions;
            Voice = voice;
            InputAudioFormat = inputAudioFormat;
            OutputAudioFormat = outputAudioFormat;
            InputAudioTranscription = inputAudioTranscription;
            Speed = speed;
            Tracing = tracing;
            TurnDetection = turnDetection;
            Tools = tools ?? new ChangeTrackingList<ConversationTool>();
            ToolChoice = toolChoice;
            Temperature = temperature;
            MaxResponseOutputTokens = maxResponseOutputTokens;
            _additionalBinaryDataProperties = additionalBinaryDataProperties;
        }

        internal InternalRealtimeSessionCreateResponseClientSecret ClientSecret { get; }

        internal IList<InternalRealtimeRequestSessionModality> Modalities { get; }

        public string Instructions { get; }

        internal InternalVoiceIdsShared? Voice { get; }

        public RealtimeAudioFormat? InputAudioFormat { get; }

        public RealtimeAudioFormat? OutputAudioFormat { get; }

        internal InternalRealtimeSessionCreateResponseInputAudioTranscription InputAudioTranscription { get; }

        public float? Speed { get; }

        public BinaryData Tracing { get; }

        internal InternalRealtimeSessionCreateResponseTurnDetection TurnDetection { get; }

        public IList<ConversationTool> Tools { get; }

        public string ToolChoice { get; }

        public float? Temperature { get; }

        public BinaryData MaxResponseOutputTokens { get; }

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