// Copyright (c) 2020, 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 util;

import 'package:js/js.dart';

@JS()
external void eval(String code);

@JS()
external makeDiv(String text);

// Static error to name @JS class the same as a @Native class, so we use a
// namespace `Foo` to avoid conflicting with the native class.
@JS('Foo.HTMLDivElement')
class HTMLDivElement {
  external String bar();
}

@JS('Foo.HTMLDivElement')
@staticInterop
class StaticHTMLDivElement {}

extension StaticHTMLDivElementExtension on StaticHTMLDivElement {
  external String bar();
  external StaticHTMLDivElement cloneNode(bool? deep);
}

@pragma('dart2js:noInline')
@pragma('dart2js:assumeDynamic')
confuse(x) => x;

void setUpJS() {
  eval(r"""
  var Foo = {}

  // A constructor function with the same name as a HTML element.
  Foo.HTMLDivElement = function(a) {
    this.a = a;
  }

  Foo.HTMLDivElement.prototype.bar = function() {
    return this.a;
  }

  Foo.HTMLDivElement.prototype.toString = function() {
    return "HTMLDivElement(" + this.a + ")";
  }

  self.makeDiv = function(text) {
    return new Foo.HTMLDivElement(text);
  }
  """);
}
