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

import 'package:syncbase/syncbase_client.dart' show Perms, SyncbaseClient;

const appName = 'app';
const dbName = 'db';
const tableNameGames = 'games';
const tableNameSettings = 'table_settings';

// TODO(alexfandrianto): This may need to be the global mount table with a
// proxy. Otherwise, it will be difficult for other users to run.
// https://github.com/vanadium/issues/issues/782
const mtAddr = '/192.168.86.254:8101';
const sgPrefix = 'croupier/%%sync';
const sgSuffix = 'discovery';
const sgSuffixGame = 'gaming';

typedef void NoArgCb();
typedef void updateCallbackT(String key, String value);

String openPermsJson =
    '{"Admin":{"In":["..."]},"Write":{"In":["..."]},"Read":{"In":["..."]},"Resolve":{"In":["..."]},"Debug":{"In":["..."]}}';
Perms openPerms = SyncbaseClient.perms(openPermsJson);

void log(String msg) {
  DateTime now = new DateTime.now();
  print('$now $msg');
}


// data should contain a JSON-encoded logic_game.GameStartData
String syncgameSuffix(String data) {
  return "${sgSuffixGame}-${data}";
}
String syncgamePrefix(int gameID) {
  return "${gameID}";
}