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

@JS()
library;

import 'dart:convert';
// TODO: https://github.com/dart-lang/webdev/issues/2508
// ignore: deprecated_member_use
import 'dart:html';
// TODO: https://github.com/dart-lang/webdev/issues/2508
// ignore: deprecated_member_use
import 'dart:js';

import 'package:dwds/data/debug_info.dart';
// TODO: https://github.com/dart-lang/webdev/issues/2508
// ignore: deprecated_member_use
import 'package:js/js.dart';

void main() {
  final debugInfoJson = _readDartDebugInfo();
  document.dispatchEvent(CustomEvent('dart-app-ready', detail: debugInfoJson));
}

String _readDartDebugInfo() {
  final windowContext = JsObject.fromBrowserObject(window);

  return jsonEncode(
    DebugInfo(
      appEntrypointPath: windowContext['\$dartEntrypointPath'] as String?,
      appId: windowContext['\$dartAppId'] as String?,
      appInstanceId: windowContext['\$dartAppInstanceId'] as String?,
      appOrigin: window.location.origin,
      appUrl: window.location.href,
      extensionUrl: windowContext['\$dartExtensionUri'] as String?,
      isInternalBuild: windowContext['\$isInternalBuild'] as bool?,
      isFlutterApp: windowContext['\$isFlutterApp'] as bool?,
    ),
  );
}
