package funkin.ui;

#if newgrounds
import funkin.NGio;
import funkin.ui.Prompt;

class NgPrompt extends Prompt
{
	public function new(text:String, style:ButtonStyle = Yes_No)
	{
		super(text, style);
	}

	static public function showLogin()
	{
		return showLoginPrompt(true);
	}

	static public function showSavedSessionFailed()
	{
		return showLoginPrompt(false);
	}

	static function showLoginPrompt(fromUi:Bool)
	{
		var prompt = new NgPrompt("Talking to server...", None);
		prompt.openCallback = NGio.login.bind(function popupLauncher(openPassportUrl)
		{
			var choiceMsg = fromUi ? #if web "Log in to Newgrounds?" #else null #end // User-input needed to allow popups
				: "Your session has expired.\n Please login again.";

			if (choiceMsg != null)
			{
				prompt.setText(choiceMsg);
				prompt.setButtons(Yes_No);
				#if web
				prompt.buttons.getItem("yes").fireInstantly = true;
				#end
				prompt.onYes = function()
				{
					prompt.setText("Connecting..." #if web + "\n(check your popup blocker)" #end);
					prompt.setButtons(None);
					openPassportUrl();
				};
				prompt.onNo = function()
				{
					prompt.close();
					prompt = null;
					NGio.cancelLogin();
				};
			}
			else
			{
				prompt.setText("Connecting...");
				openPassportUrl();
			}
		}, function onLoginComplete(result:ConnectionResult)
		{
			switch (result)
			{
				case Success:
					{
						prompt.setText("Login Successful");
						prompt.setButtons(Ok);
						prompt.onYes = prompt.close;
					}
				case Fail(msg):
					{
						trace("Login Error:" + msg);
						prompt.setText("Login failed");
						prompt.setButtons(Ok);
						prompt.onYes = prompt.close;
					}
				case Cancelled:
					{
						if (prompt != null)
						{
							prompt.setText("Login cancelled by user");
							prompt.setButtons(Ok);
							prompt.onYes = prompt.close;
						}
						else
							trace("Login cancelled via prompt");
					}
			}
		});

		return prompt;
	}

	static public function showLogout()
	{
		var user = io.newgrounds.NG.core.user.name;
		var prompt = new NgPrompt('Log out of $user?', Yes_No);
		prompt.onYes = function()
		{
			NGio.logout();
			prompt.close();
		};
		prompt.onNo = prompt.close;
		return prompt;
	}
}
#end