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

#include "sky/engine/config.h"
#include "sky/engine/bindings/builtin.h"

#include "base/logging.h"
#include "dart/runtime/include/dart_api.h"
#include "gen/sky/bindings/DartGlobal.h"
#include "sky/engine/bindings/builtin_natives.h"
#include "sky/engine/bindings/builtin_sky.h"
#include "sky/engine/bindings/mojo_natives.h"
#include "sky/engine/tonic/dart_builtin.h"

namespace blink {
namespace {

struct LibraryDescriptor {
  const char* url;
  bool has_natives;
  Dart_NativeEntrySymbol native_symbol;
  Dart_NativeEntryResolver native_resolver;
};

const LibraryDescriptor kBuiltinLibraries[] = {
    /* { url_, has_natives_, native_symbol_, native_resolver_ } */
    {"dart:sky_builtin", true, BuiltinNatives::NativeSymbol, BuiltinNatives::NativeLookup},
    {"dart:sky", true, skySnapshotSymbolizer, skySnapshotResolver},
    {"mojo:bindings", false, nullptr, nullptr},
    {"mojo:core", true, MojoNativeSymbol, MojoNativeLookup},
};

}  // namespace

void Builtin::SetNativeResolver(BuiltinLibraryId id) {
  static_assert(arraysize(kBuiltinLibraries) == kInvalidLibrary,
      "Unexpected number of builtin libraries");
  DCHECK_GE(id, kBuiltinLibrary);
  DCHECK_LT(id, kInvalidLibrary);
  if (kBuiltinLibraries[id].has_natives) {
    Dart_Handle library = DartBuiltin::LookupLibrary(kBuiltinLibraries[id].url);
    // Setup the native resolver for built in library functions.
    DART_CHECK_VALID(
        Dart_SetNativeResolver(library,
                               kBuiltinLibraries[id].native_resolver,
                               kBuiltinLibraries[id].native_symbol));
  }
}

Dart_Handle Builtin::LoadAndCheckLibrary(BuiltinLibraryId id) {
  static_assert(arraysize(kBuiltinLibraries) == kInvalidLibrary,
      "Unexpected number of builtin libraries");
  DCHECK_GE(id, kBuiltinLibrary);
  DCHECK_LT(id, kInvalidLibrary);
  Dart_Handle library = DartBuiltin::LookupLibrary(kBuiltinLibraries[id].url);
  DART_CHECK_VALID(library);
  return library;
}

}  // namespace blink
