// Copyright (c) 2015, 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.

/// A simple web app to hand-test the usage library.
library usage_example;

import 'dart:html';

import 'package:usage/usage_html.dart';

Analytics _analytics;
String _lastUa;
int _count = 0;

void main() {
  querySelector('#foo').onClick.listen((_) => _handleFoo());
  querySelector('#bar').onClick.listen((_) => _handleBar());
  querySelector('#page').onClick.listen((_) => _changePage());
}

String _ua() => (querySelector('#ua') as InputElement).value.trim();

Analytics getAnalytics() {
  if (_analytics == null || _lastUa != _ua()) {
    _lastUa = _ua();
    _analytics = AnalyticsHtml(_lastUa, 'Test app', '1.0');
    _analytics.sendScreenView(window.location.pathname);
  }

  return _analytics;
}

void _handleFoo() {
  var analytics = getAnalytics();
  analytics.sendEvent('main', 'foo');
}

void _handleBar() {
  var analytics = getAnalytics();
  analytics.sendEvent('main', 'bar');
}

void _changePage() {
  var analytics = getAnalytics();
  window.history.pushState(null, 'new page', '${++_count}.html');
  analytics.sendScreenView(window.location.pathname);
}
