// <auto-generated/>

#nullable disable

using System;
using System.ComponentModel;
using OpenAI;

namespace OpenAI.Responses
{
    internal readonly partial struct InternalResponsesResponseStreamEventType : IEquatable<InternalResponsesResponseStreamEventType>
    {
        private readonly string _value;
        private const string ErrorValue = "error";
        private const string ResponseCompletedValue = "response.completed";
        private const string ResponseContentPartAddedValue = "response.content_part.added";
        private const string ResponseContentPartDoneValue = "response.content_part.done";
        private const string ResponseCreatedValue = "response.created";
        private const string ResponseFailedValue = "response.failed";
        private const string ResponseFileSearchCallCompletedValue = "response.file_search_call.completed";
        private const string ResponseFileSearchCallInProgressValue = "response.file_search_call.in.progress";
        private const string ResponseFileSearchCallSearchingValue = "response.file_search_call.searching";
        private const string ResponseFunctionCallArgumentsDeltaValue = "response.function_call_arguments.delta";
        private const string ResponseFunctionCallArgumentsDoneValue = "response.function_call_arguments.done";
        private const string ResponseInProgressValue = "response.in_progress";
        private const string ResponseIncompleteValue = "response.incomplete";
        private const string ResponseOutputItemAddedValue = "response.output_item.added";
        private const string ResponseOutputItemDoneValue = "response.output_item.done";
        private const string ResponseOutputTextAnnotationAddedValue = "response.output_text.annotation.added";
        private const string ResponseOutputTextDeltaValue = "response.output_text.delta";
        private const string ResponseOutputTextDoneValue = "response.output_text.done";
        private const string ResponseRefusalDeltaValue = "response.refusal.delta";
        private const string ResponseRefusalDoneValue = "response.refusal.done";
        private const string ResponseWebSearchCallCompletedValue = "response.web_search_call.completed";
        private const string ResponseWebSearchCallInProgressValue = "response.web_search_call.in_progress";
        private const string ResponseWebSearchCallSearchingValue = "response.web_search_call.searching";

        public InternalResponsesResponseStreamEventType(string value)
        {
            Argument.AssertNotNull(value, nameof(value));

            _value = value;
        }

        public static InternalResponsesResponseStreamEventType Error { get; } = new InternalResponsesResponseStreamEventType(ErrorValue);

        public static InternalResponsesResponseStreamEventType ResponseCompleted { get; } = new InternalResponsesResponseStreamEventType(ResponseCompletedValue);

        public static InternalResponsesResponseStreamEventType ResponseContentPartAdded { get; } = new InternalResponsesResponseStreamEventType(ResponseContentPartAddedValue);

        public static InternalResponsesResponseStreamEventType ResponseContentPartDone { get; } = new InternalResponsesResponseStreamEventType(ResponseContentPartDoneValue);

        public static InternalResponsesResponseStreamEventType ResponseCreated { get; } = new InternalResponsesResponseStreamEventType(ResponseCreatedValue);

        public static InternalResponsesResponseStreamEventType ResponseFailed { get; } = new InternalResponsesResponseStreamEventType(ResponseFailedValue);

        public static InternalResponsesResponseStreamEventType ResponseFileSearchCallCompleted { get; } = new InternalResponsesResponseStreamEventType(ResponseFileSearchCallCompletedValue);

        public static InternalResponsesResponseStreamEventType ResponseFileSearchCallInProgress { get; } = new InternalResponsesResponseStreamEventType(ResponseFileSearchCallInProgressValue);

        public static InternalResponsesResponseStreamEventType ResponseFileSearchCallSearching { get; } = new InternalResponsesResponseStreamEventType(ResponseFileSearchCallSearchingValue);

        public static InternalResponsesResponseStreamEventType ResponseFunctionCallArgumentsDelta { get; } = new InternalResponsesResponseStreamEventType(ResponseFunctionCallArgumentsDeltaValue);

        public static InternalResponsesResponseStreamEventType ResponseFunctionCallArgumentsDone { get; } = new InternalResponsesResponseStreamEventType(ResponseFunctionCallArgumentsDoneValue);

        public static InternalResponsesResponseStreamEventType ResponseInProgress { get; } = new InternalResponsesResponseStreamEventType(ResponseInProgressValue);

        public static InternalResponsesResponseStreamEventType ResponseIncomplete { get; } = new InternalResponsesResponseStreamEventType(ResponseIncompleteValue);

        public static InternalResponsesResponseStreamEventType ResponseOutputItemAdded { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputItemAddedValue);

        public static InternalResponsesResponseStreamEventType ResponseOutputItemDone { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputItemDoneValue);

        public static InternalResponsesResponseStreamEventType ResponseOutputTextAnnotationAdded { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputTextAnnotationAddedValue);

        public static InternalResponsesResponseStreamEventType ResponseOutputTextDelta { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputTextDeltaValue);

        public static InternalResponsesResponseStreamEventType ResponseOutputTextDone { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputTextDoneValue);

        public static InternalResponsesResponseStreamEventType ResponseRefusalDelta { get; } = new InternalResponsesResponseStreamEventType(ResponseRefusalDeltaValue);

        public static InternalResponsesResponseStreamEventType ResponseRefusalDone { get; } = new InternalResponsesResponseStreamEventType(ResponseRefusalDoneValue);

        public static InternalResponsesResponseStreamEventType ResponseWebSearchCallCompleted { get; } = new InternalResponsesResponseStreamEventType(ResponseWebSearchCallCompletedValue);

        public static InternalResponsesResponseStreamEventType ResponseWebSearchCallInProgress { get; } = new InternalResponsesResponseStreamEventType(ResponseWebSearchCallInProgressValue);

        public static InternalResponsesResponseStreamEventType ResponseWebSearchCallSearching { get; } = new InternalResponsesResponseStreamEventType(ResponseWebSearchCallSearchingValue);

        public static bool operator ==(InternalResponsesResponseStreamEventType left, InternalResponsesResponseStreamEventType right) => left.Equals(right);

        public static bool operator !=(InternalResponsesResponseStreamEventType left, InternalResponsesResponseStreamEventType right) => !left.Equals(right);

        public static implicit operator InternalResponsesResponseStreamEventType(string value) => new InternalResponsesResponseStreamEventType(value);

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object obj) => obj is InternalResponsesResponseStreamEventType other && Equals(other);

        public bool Equals(InternalResponsesResponseStreamEventType other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase);

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0;

        public override string ToString() => _value;
    }
}
