<!-- Yandex Games SDK -->
//script src="/sdk.js" /script

//script
ysdk = null;
debug = false;

_sdk_initialized = function() {}
function init_sdk(params) {
	YaGames.init(params)
		.then((_sdk) => {
			ysdk = _sdk;
			_sdk_initialized(JSON.stringify(ysdk.environment));
			ysdk.features.LoadingAPI?.ready();
		})
		.catch(console.error);
}

// разметка геймплея
function game_start() {
	ysdk.features.GameplayAPI?.start()
}

function game_stop() {
	ysdk.features.GameplayAPI?.stop()
}



// реклама
_show_fullscreen_banner_on_open = function(){};
_show_fullscreen_banner_on_close = function(){};
_show_fullscreen_banner_on_error = function(){};
_show_fullscreen_banner_on_offline = function(){};

function show_fullscreen_banner() {
	ysdk.adv.showFullscreenAdv({
		callbacks: {
			onOpen: () => {
				_show_fullscreen_banner_on_open("Реклама открылась");
			},
			onClose: function(wasShown) {
				_show_fullscreen_banner_on_close(wasShown);
			},
			onError: function(error) {
				_show_fullscreen_banner_on_error("Произошла ошибка %s" % error);
			},
			onOffline: () => {
				_show_fullscreen_banner_on_offline("Нет доступа к сети");
			}
		}
	})
}


_show_rewarded_video_on_open = function(){};
_show_rewarded_video_on_close = function(){};
_show_rewarded_video_on_rewarded = function(){};
_show_rewarded_video_on_error = function(){};

function show_rewarded_video() {
	ysdk.adv.showRewardedVideo({
		callbacks: {
			onOpen: () => {
				_show_rewarded_video_on_open("Rewarded video открыто");
			},
			onClose: () => {
				_show_rewarded_video_on_close("Rewarded video закрыто");
			},
			onRewarded: () => {
				_show_rewarded_video_on_rewarded("Награда за просмотр видео выдана");
			},
			onError: (error) => {
				_show_rewarded_video_on_error(error);
			}
		}
	})
}


// игрок
var player;

_player_initialized = function() {}
function init_player(scopes) {
	ysdk.getPlayer({"scopes":scopes}).then(_player => {
		player = _player;
		_player_initialized(JSON.stringify(player));
		// return player;
	}).catch(err => {
		console.log("Ошибка при инициализации объекта Player.");
	});
}


_open_auth_dialog = function() {}

function open_auth_dialog(scopes) {
	if (player.getMode() === 'lite') {
		// Игрок не авторизован.
		ysdk.auth.openAuthDialog().then(() => {
			// Игрок успешно авторизован.
			_open_auth_dialog(true);
			init_player(scopes).catch(err => {
				console.log("Ошибка при инициализации объекта Player.");
			});
		}).catch(() => {
			// Игрок не авторизован.
			_open_auth_dialog(false);
		});
	} else {
		_open_auth_dialog(true);
	}
}


// Возможно, надо писать setData({data}). Надо проверять
_save_data_result = function(){}
function save_data(data, flush) {
	data = JSON.parse(data);
	player.setData(data, flush).then((result) => {
		if (debug) {
			console.log('Data saved with result: ", result, ". Data: ', data, ". Flush: ", flush);
		}
		_save_data_result(result);
	});
}

_save_stats_result = function(){}
function save_stats(stats) {
	stats = JSON.parse(stats);
	player.setStats(stats).then((result) => {
		if (debug) {
			console.log('Stats saved with result: ', result, '. Stats: ', stats);
		}
		_save_stats_result(result);
	});
}


_load_data_callback = function(){}
function load_data(keys = "") {
	if (keys == "") {
		player.getData().then((result) => {
			if (debug) {
				console.log("All data loaded: ", result);
			}
			_load_data_callback(JSON.stringify(result));
		});
	} else {
		keys = JSON.parse(keys);
		player.getData(keys).then((result) => {
			if (debug) {
				console.log("Data loaded: ", result);
			}
			_load_data_callback(JSON.stringify(result));
		});
	}
}


_load_stats_callback = function(){}
function load_stats(keys = "") {
	if (keys == "") {
		player.getStats().then((result) => {
			if (debug) {
				console.log("All stats loaded: ", result);
			}
			_load_stats_callback(JSON.stringify(result));
		});
	} else {
		keys = JSON.parse(keys);
		player.getStats(keys).then((result) => {
			if (debug) {
				console.log("Stats loaded: ", result);
			}
			_load_stats_callback(JSON.stringify(result));
		});
	}
}




// лидерборды
var lb;

_init_leaderboard = function() {}
function init_leaderboard() {
	ysdk.getLeaderboards()
		.then(_lb => {
			lb = _lb;
			_init_leaderboard()
		});
}


_get_leaderboard_description_return = function() {}

function get_leaderboard_description(leaderboard_name) {
	ysdk.getLeaderboards()
		.then(lb => lb.getLeaderboardDescription(leaderboard_name))
		.then(res => _get_leaderboard_description_return(JSON.stringify(res)));
}



function set_leaderboard_score(lb_name, score, extra_data) {
	ysdk.getLeaderboards()
	.then(lb => {
		if (extra_data == "") {
			lb.setLeaderboardScore(lb_name, score); // Без extraData
		} else
			lb.setLeaderboardScore(lb_name, score, extra_data);  // С extraData
		});
}


_get_leaderboard_player_entry_return = function() {}
function get_leaderboard_player_entry(lb_name) {
	if (ysdk.isAvailableMethod('leaderboards.getLeaderboardPlayerEntry')) {
		ysdk.getLeaderboards()
			.then(lb => lb.getLeaderboardPlayerEntry(lb_name))
			.then(res => _get_leaderboard_player_entry_return(JSON.stringify(res)))
			.catch(err => {
				if (err.code === 'LEADERBOARD_PLAYER_NOT_PRESENT') {
					// Срабатывает, если у игрока нет записи в лидерборде.
					_get_leaderboard_player_entry_return("0");
				}
			});
	} else {
		// Метод недоступен для пользователя
		_get_leaderboard_player_entry_return("-1");
	}
}


_get_leaderboard_entries_answer = function() {}
function get_leaderboard_entries(lb_name, top = 10, include_user = false, around = 3) {
	ysdk.getLeaderboards()
		.then(lb => {
			if (top == 10 && include_user == false) {  // С использованием всех значений по умолчанию.
				lb.getLeaderboardEntries(lb_name)
					.then(res => {
						if (debug) {
							console.log(res);
						}
						_get_leaderboard_entries_answer(JSON.stringify(res));
					});
			} else if (top != 10 && include_user == false) {
				lb.getLeaderboardEntries(lb_name, { "quantityTop": top })
					.then(res => {
						if (debug) {
							console.log(res);
						}
						_get_leaderboard_entries_answer(JSON.stringify(res));
					});
			} else {
				lb.getLeaderboardEntries(lb_name, { "quantityTop": top, "includeUser": include_user, "quantityAround": around })
					.then(res => {
						if (debug) {
							console.log(res);
						}
						_get_leaderboard_entries_answer(JSON.stringify(res));
					});
			}
		});
}
///script