// Copyright 2015 Google. All rights reserved. Use of this source code is
// governed by a BSD-style license that can be found in the LICENSE file.

library wip.multiplex;

import 'dart:io' show stderr;

import 'package:args/args.dart' show ArgParser;
import 'package:logging/logging.dart'
    show hierarchicalLoggingEnabled, Level, Logger, LogRecord;
import 'package:webkit_inspection_protocol/multiplex.dart' show Server;
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'
    show ChromeConnection;

main(List<String> argv) async {
  var args = (new ArgParser()
    ..addFlag('verbose', abbr: 'v', defaultsTo: false, negatable: false)
    ..addFlag('model_dom', defaultsTo: false, negatable: true)
    ..addOption('chrome_host', defaultsTo: 'localhost')
    ..addOption('chrome_port', defaultsTo: '9222')
    ..addOption('listen_port', defaultsTo: '9223')).parse(argv);

  hierarchicalLoggingEnabled = true;

  if (args['verbose']) {
    Logger.root.level = Level.ALL;
  } else {
    Logger.root.level = Level.WARNING;
  }

  Logger.root.onRecord.listen((LogRecord rec) {
    stderr.writeln('${rec.level.name}: ${rec.time}: ${rec.message}');
  });

  var cr =
      new ChromeConnection(args['chrome_host'], int.parse(args['chrome_port']));
  new Server(int.parse(args['listen_port']), cr, modelDom: args['model_dom']);
}
