package;

import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.system.debug.FlxDebugger;
import flixel.util.FlxSave;

class PlayState extends FlxState
{
	private var _sprBackground:FlxSprite;

	private var _gelPet:Gel;

	private var _clock:Clock;

	private var _hud:HUD;

	private var _infoMenu:InfoMenu;


	override public function create():Void
	{
		// SAVE BEGIN
		var _save:FlxSave = new FlxSave();
		_save.bind("Pet.GB");

		_sprBackground = new FlxSprite(0, 0, AssetPaths.background__png);
		add(_sprBackground);

		_clock = new Clock();

		if (_save.data.GelPet == null)
		{
			_gelPet = new Gel(0, 0, _clock);
			_gelPet.x = ((FlxG.width/2) - (_gelPet.width/2));
			_gelPet.y = ((FlxG.height/2) - (_gelPet.height/2));
		}
		else
		{
			_gelPet = _save.data.gel;
			_gelPet._clock = _save.data.clock;
		}
		add(_gelPet);

		// Interface
		_infoMenu = new InfoMenu(_gelPet);
		if (_save.data.HUD == null)
			_hud = new HUD(_gelPet, _clock, _infoMenu);
		else
			_hud = _save.data.hud;
		add(_hud);
		add(_infoMenu);

		super.create();
		
		// DEBUG
		FlxG.debugger.setLayout(FlxDebuggerLayout.RIGHT);

		// SAVE END
		_save.close();
	}

	override public function update(elapsed:Float):Void
	{
		super.update(elapsed);
		if (_infoMenu.visible)
		{
			_gelPet.active = false;
			_gelPet._clock.pause(true);
			_hud.active = false;
		}
		else
		{
			_gelPet.active = true;
			_gelPet._clock.pause(false);
			_hud.active = true;
			saveGame();
		}
	}

	private function saveGame()
	{
		// SAVE BEGIN
		var _save:FlxSave = new FlxSave();
		_save.bind("Pet.GB");

		// SAVED DATA
		_save.data.gel = _gelPet;
		_save.data.clock = _gelPet._clock;
		_save.data.hud = _hud;
		//_save.data.age = _gel.age;

		// WRITE SAVE
		//_save.flush();

		// SAVE END
		_save.close;
	}

	private function quitGame():Void
	{
		// SAVE BEGIN
		var _save:FlxSave = new FlxSave();
		_save.bind("Pet.GB");

		// SAVED DATA
		_save.data.HUD = _hud;

		// SAVE END
		_save.close;
	}
}