/**
 * Copyright 2019 Google LLC
 *
 * Licensed 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
 *
 *     https://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.
 */

/** @see https://wicg.github.io/serial/#paritytype-enum */
type ParityType = 'none' | 'even' | 'odd';

/** @see https://wicg.github.io/serial/#serialoptions-dictionary */
interface SerialOptions {
  baudrate: number;
  databits?: number;
  stopbits?: number;
  parity?: ParityType;
  buffersize?: number;
  rtscts?: boolean;
}

/** @see https://wicg.github.io/serial/#serialport-interface */
declare class SerialPort {
  readonly readable: ReadableStream<Uint8Array>;
  readonly writable: WritableStream<Uint8Array>;

  open(options?: SerialOptions): Promise<void>;
  close(): void;
}

/** @see https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/serial/serial_port_filter.idl */
interface SerialPortFilter {
  usbVendorId?: number;
  usbProductId?: number;
}

/** @see https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/serial/serial_port_request_options.idl */
interface SerialPortRequestOptions {
  filters?: SerialPortFilter[];
}

/** @see https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/serial/serial_connection_event_init.idl */
interface SerialConnectionEventInit extends EventInit {
  port: SerialPort;
}

/** @see https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/serial/serial_connection_event.idl */
declare class SerialConnectionEvent extends Event {
  constructor(type: string, eventInitDict: SerialConnectionEventInit);
  readonly port: SerialPort;
}

/** @see https://wicg.github.io/serial/#serial-interface */
declare class Serial extends EventTarget {
  onconnect(): ((this: this, ev: SerialConnectionEvent) => any) | null;
  ondisconnect(): ((this: this, ev: SerialConnectionEvent) => any) | null;
  getPorts(): Promise<SerialPort[]>;
  requestPort(options?: SerialPortRequestOptions): Promise<SerialPort>;
  addEventListener(
      type: 'connect' | 'disconnect',
      listener: (this: this, ev: SerialConnectionEvent) => any,
      useCapture?: boolean): void;
  addEventListener(
      type: string,
      listener: EventListenerOrEventListenerObject | null,
      options?: boolean | AddEventListenerOptions): void;
  removeEventListener(
      type: 'connect' | 'disconnect',
      callback: (this: this, ev: SerialConnectionEvent) => any,
      useCapture?: boolean): void;
  removeEventListener(
      type: string,
      callback: EventListenerOrEventListenerObject | null,
      options?: EventListenerOptions | boolean): void;
}

/** @see https://wicg.github.io/serial/#extensions-to-the-navigator-interface */
interface Navigator {
  readonly serial: Serial;
}

/** @see https://wicg.github.io/serial/#extensions-to-workernavigator-interface */
interface WorkerNavigator {
  readonly serial: Serial;
}
