// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of repositories;

class EventRepository implements M.EventRepository {
  final StreamController<M.Event> _onEvent;
  Stream<M.Event> get onEvent => _onEvent.stream;

  final Stream<M.VMEvent> onVMEvent;
  final Stream<M.VMUpdateEvent> onVMUpdate;
  final Stream<M.IsolateEvent> onIsolateEvent;
  final Stream<M.IsolateStartEvent> onIsolateStart;
  final Stream<M.IsolateRunnableEvent> onIsolateRunnable;
  final Stream<M.IsolateExitEvent> onIsolateExit;
  final Stream<M.IsolateUpdateEvent> onIsolateUpdate;
  final Stream<M.IsolateReloadEvent> onIsolateReload;
  final Stream<M.ServiceExtensionAddedEvent> onServiceExtensionAdded;
  final Stream<M.DebugEvent> onDebugEvent;
  final Stream<M.PauseStartEvent> onPauseStart;
  final Stream<M.PauseExitEvent> onPauseExit;
  final Stream<M.PauseBreakpointEvent> onPauseBreakpoint;
  final Stream<M.PauseInterruptedEvent> onPauseInterrupted;
  final Stream<M.PauseExceptionEvent> onPauseException;
  final Stream<M.ResumeEvent> onResume;
  final Stream<M.BreakpointAddedEvent> onBreakpointAdded;
  final Stream<M.BreakpointResolvedEvent> onBreakpointResolved;
  final Stream<M.BreakpointRemovedEvent> onBreakpointRemoved;
  final Stream<M.InspectEvent> onInspect;
  final Stream<M.GCEvent> onGCEvent;
  final Stream<M.ExtensionEvent> onExtensionEvent;
  final Stream<M.TimelineEventsEvent> onTimelineEvents;
  final Stream<M.ConnectionClosedEvent> onConnectionClosed;

  EventRepository() : this._(new StreamController.broadcast());

  EventRepository._(StreamController controller) : this.__(controller,
      controller.stream.where((e) => e is M.VMEvent),
      controller.stream.where((e) => e is M.IsolateEvent),
      controller.stream.where((e) => e is M.DebugEvent),
      controller.stream.where((e) => e is M.GCEvent),
      controller.stream.where((e) => e is M.ExtensionEvent),
      controller.stream.where((e) => e is M.TimelineEventsEvent),
      controller.stream.where((e) => e is M.ConnectionClosedEvent));

  EventRepository.__(StreamController controller,
    Stream<M.VMEvent> onVMEvent, Stream<M.IsolateEvent> onIsolateEvent,
    Stream<M.DebugEvent> onDebugEvent, Stream<M.GCEvent> onGCEvent,
    Stream<M.ExtensionEvent> onExtensionEvent,
    Stream<M.TimelineEventsEvent> onTimelineEvents,
    Stream<M.ConnectionClosedEvent> onConnectionClosed)
    : _onEvent = controller,
      onVMEvent = onVMEvent,
      onVMUpdate = onVMEvent.where((e) => e is M.VMUpdateEvent),
      onIsolateEvent = onIsolateEvent,
      onIsolateStart = onIsolateEvent.where((e) => e is M.IsolateStartEvent),
      onIsolateRunnable =
          onIsolateEvent.where((e) => e is M.IsolateRunnableEvent),
      onIsolateExit = onIsolateEvent.where((e) => e is M.IsolateExitEvent),
      onIsolateUpdate = onIsolateEvent.where((e) => e is M.IsolateUpdateEvent),
      onIsolateReload = onIsolateEvent.where((e) => e is M.IsolateReloadEvent),
      onServiceExtensionAdded =
          onIsolateEvent.where((e) => e is M.IsolateReloadEvent),
      onDebugEvent = onDebugEvent,
      onPauseStart = onDebugEvent.where((e) => e is M.PauseStartEvent),
      onPauseExit = onDebugEvent.where((e) => e is M.PauseExitEvent),
      onPauseBreakpoint =
          onDebugEvent.where((e) => e is M.PauseBreakpointEvent),
      onPauseInterrupted =
          onDebugEvent.where((e) => e is M.PauseInterruptedEvent),
      onPauseException = onDebugEvent.where((e) => e is M.PauseExceptionEvent),
      onResume = onDebugEvent.where((e) => e is M.ResumeEvent),
      onBreakpointAdded =
          onDebugEvent.where((e) => e is M.BreakpointAddedEvent),
      onBreakpointResolved =
          onDebugEvent.where((e) => e is M.BreakpointResolvedEvent),
      onBreakpointRemoved =
          onDebugEvent.where((e) => e is M.BreakpointRemovedEvent),
      onInspect = onDebugEvent.where((e) => e is M.InspectEvent),
      onGCEvent = onGCEvent,
      onExtensionEvent = onExtensionEvent,
      onTimelineEvents = onTimelineEvents,
      onConnectionClosed = onConnectionClosed;

  void add(M.Event e) {
    _onEvent.add(e);
  }
}
