package funkin.modding;

import polymod.Polymod;

class PolymodErrorHandler
{
	/**
	 * Show a popup with the given text.
	 * This displays a system popup, it WILL interrupt the game.
	 * Make sure to only use this when it's important, like when there's a script error.
	 * 
	 * @param name The name at the top of the popup.
	 * @param desc The body text of the popup.
	 */
	public static function showAlert(name:String, desc:String):Void
	{
		lime.app.Application.current.window.alert(desc, name);
	}

	public static function onPolymodError(error:PolymodError):Void
	{
		// Perform an action based on the error code.
		switch (error.code)
		{
			case MOD_LOAD_PREPARE:
				logInfo('[POLYMOD]: ${error.message}');
			case MOD_LOAD_DONE:
				logInfo('[POLYMOD]: ${error.message}');
			case MISSING_ICON:
				logWarn('[POLYMOD]: A mod is missing an icon. Please add one.');
			case SCRIPT_PARSE_ERROR:
				// A syntax error when parsing a script.
				logError('[POLYMOD]: ${error.message}');
				showAlert('Polymod Script Parsing Error', error.message);
			case SCRIPT_EXCEPTION:
				// A runtime error when running a script.
				logError('[POLYMOD]: ${error.message}');
				showAlert('Polymod Script Execution Error', error.message);
			case SCRIPT_CLASS_NOT_FOUND:
				// A scripted class tried to reference an unknown superclass.
				logError('[POLYMOD]: ${error.message}');
				showAlert('Polymod Script Parsing Error', error.message);
			default:
				// Log the message based on its severity.
				switch (error.severity)
				{
					case NOTICE:
						logInfo('[POLYMOD]: ${error.message}');
					case WARNING:
						logWarn('[POLYMOD]: ${error.message}');
					case ERROR:
						logError('[POLYMOD]: ${error.message}');
				}
		}
	}

	static function logInfo(message:String):Void
	{
		trace('[INFO ] ${message}');
	}

	static function logError(message:String):Void
	{
		trace('[ERROR] ${message}');
	}

	static function logWarn(message:String):Void
	{
		trace('[WARN ] ${message}');
	}
}