ig.module(
	'game.main'
)
.requires(
  'impact.debug.menu',
	'impact.game',
	'impact.font',

	'game.entities.ball',
	'game.entities.paddle-enemy',
	'game.entities.paddle-player',

	'game.levels.level1'
)
.defines(function(){
  RunningGame = ig.Game.extend({
    font: new ig.Font( 'media/04b03.font.png' ),
    statsBackground: new ig.Image('media/stats_screen.png'),
    score: {'ai': 1, 'human': 1},
    showStats: false,

    init: function() {
      ig.input.bind(ig.KEY.ESC, 'mainmenu');
      ig.input.bind(ig.KEY.UP_ARROW, 'up');
      ig.input.bind(ig.KEY.DOWN_ARROW, 'down');
      ig.input.bind(ig.KEY.T, 'force-top');
      ig.input.bind(ig.KEY.B, 'force-bottom');
      // vim goodness
      ig.input.bind(ig.KEY.K, 'up');
      ig.input.bind(ig.KEY.J, 'down');

      ig.input.bind(ig.KEY.SPACE, 'endgame');

      // Load the level
      this.loadLevel(LevelLevel1);
    },

    update: function() {
      // The user is in the game stats menu, next stop: main menu
      if (this.showStats) {
        if (ig.input.state('endgame')) {
          this.showStats = false;
          ig.system.setGame(StartScreen);
          //this.parent();
        }
        return;
      }

      // One player has won the game
      if (this.score.ai == 0 || this.score.human == 0) {
        this.showStats = true;
      }

      // The User want back to the main menu inside a running game
      if (ig.input.pressed('mainmenu')) {
        ig.system.setGame(StartScreen);
      }

      // The game is running
      if (!this.showStats) {
        this.parent(); // Update entries and background
      }
    },

    draw: function() {
		  this.parent(); // Draw entries and background
      this.font.draw(this.score.ai, 270, 25, ig.Font.ALIGN.CENTER);
      this.font.draw(this.score.human, 350, 25, ig.Font.ALIGN.CENTER);

      if (this.showStats) {
        this.statsBackground.draw(0, 0);
        this.font.draw('You ' + (this.score.ai == 0 ? 'won!' : 'loose!'), 200, 50, ig.Font.ALIGN.CENTER);
        this.font.draw('Press [SPACE] to move to the main menu', 200, 100, ig.Font.ALIGN.CENTER);
      }
	  }
  });

  StartScreen = ig.Game.extend({
    background: new ig.Image('media/main_screen.png'),

    init: function() {
      ig.input.bind(ig.KEY.ENTER, 'start');
      //ig.input.bind(ig.KEY.SPACE, 'start'); // FIXME: collides with the stats screen
    },

    update: function() {
      if (ig.input.pressed('start')) ig.system.setGame(RunningGame);
      this.parent();
    },

    draw: function() {
      this.parent();
      this.background.draw(0, 0);
    }
  });

  // Start the Game with 60fps, a resolution of 640x400 (16:10), scaled
  // up by a factor of 2
  ig.main( '#canvas', StartScreen, 60, 624, 384, 1 );
});

