# frozen_string_literal: true

# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# DO NOT EDIT! This file is generated by rb/lib/selenium/webdriver/bidi/support/bidi_generate.rb.
# Regenerate with: `bazel run //rb/lib/selenium/webdriver:bidi-generate`

module Selenium
  module WebDriver
    class BiDi
      module Protocol
        # @api private
        # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
        # @see https://w3c.github.io/webdriver-bidi/#module-log
        class Log < Domain
          EVENTS = {
            entry_added: 'log.entryAdded'
          }.freeze

          # @see https://w3c.github.io/webdriver-bidi/#cddl-type-loglevel
          LEVEL = {
            debug: 'debug',
            info: 'info',
            warn: 'warn',
            error: 'error'
          }.freeze

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          # @see https://w3c.github.io/webdriver-bidi/#cddl-type-logentry
          class Entry < Serialization::Union
            discriminator 'type', {console: 'console', javascript: 'javascript'}
            variants(
              console: 'Log::ConsoleLogEntry',
              javascript: 'Log::JavascriptLogEntry'
            )
            fallback 'Log::GenericLogEntry'
            object_only

            def self.console(**) = Log::ConsoleLogEntry.new(**)
            def self.javascript(**) = Log::JavascriptLogEntry.new(**)
          end

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          # @see https://w3c.github.io/webdriver-bidi/#cddl-type-logbaselogentry
          BaseLogEntry = Serialization::Record.define(
            level: {wire_key: 'level', enum: 'Log::LEVEL'},
            source: {wire_key: 'source', ref: 'Script::Source'},
            text: {wire_key: 'text', nullable: true, primitive: 'string'},
            timestamp: {wire_key: 'timestamp', primitive: 'integer'},
            stack_trace: {wire_key: 'stackTrace', required: false, ref: 'Script::StackTrace'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          # @see https://w3c.github.io/webdriver-bidi/#cddl-type-loggenericlogentry
          GenericLogEntry = Serialization::Record.define(
            level: {wire_key: 'level', enum: 'Log::LEVEL'},
            source: {wire_key: 'source', ref: 'Script::Source'},
            text: {wire_key: 'text', nullable: true, primitive: 'string'},
            timestamp: {wire_key: 'timestamp', primitive: 'integer'},
            stack_trace: {wire_key: 'stackTrace', required: false, ref: 'Script::StackTrace'},
            type: {wire_key: 'type', primitive: 'string'}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          # @see https://w3c.github.io/webdriver-bidi/#cddl-type-logconsolelogentry
          ConsoleLogEntry = Serialization::Record.define(
            type: {fixed: 'console'},
            level: {wire_key: 'level', enum: 'Log::LEVEL'},
            source: {wire_key: 'source', ref: 'Script::Source'},
            text: {wire_key: 'text', nullable: true, primitive: 'string'},
            timestamp: {wire_key: 'timestamp', primitive: 'integer'},
            stack_trace: {wire_key: 'stackTrace', required: false, ref: 'Script::StackTrace'},
            method_: {wire_key: 'method', primitive: 'string'},
            args: {wire_key: 'args', ref: 'Script::RemoteValue', list: true}
          )

          # @api private
          # @see https://www.selenium.dev/documentation/warnings/bidi-implementation/
          # @see https://w3c.github.io/webdriver-bidi/#cddl-type-logjavascriptlogentry
          JavascriptLogEntry = Serialization::Record.define(
            type: {fixed: 'javascript'},
            level: {wire_key: 'level', enum: 'Log::LEVEL'},
            source: {wire_key: 'source', ref: 'Script::Source'},
            text: {wire_key: 'text', nullable: true, primitive: 'string'},
            timestamp: {wire_key: 'timestamp', primitive: 'integer'},
            stack_trace: {wire_key: 'stackTrace', required: false, ref: 'Script::StackTrace'}
          )

          EVENT_TYPES = {
            'log.entryAdded' => Log::Entry
          }.freeze
        end # Log
      end # Protocol
    end # BiDi
  end # WebDriver
end # Selenium
