class IMICFPS
  class Window < CyberarmEngine::Engine
    attr_accessor :number_of_vertices, :needs_cursor
    attr_reader :camera

    def initialize(window_width = 1280, window_height = 800, fullscreen = false)
      fps_target = (ARGV.first.to_i != 0) ? ARGV.first.to_i : 60
      if ARGV.join.include?("--native")
        super(width: Gosu.screen_width, height: Gosu.screen_height, fullscreen: true, resizable: true, update_interval: 1000.0/fps_target)
      else
        super(width: window_width, height: window_height, fullscreen: fullscreen, resizable: true, update_interval: 1000.0/fps_target)
      end
      $window = self
      @needs_cursor = false
      @number_of_vertices = 0

      self.caption = "#{IMICFPS::NAME} v#{IMICFPS::VERSION} (#{IMICFPS::RELEASE_NAME})"

      @show_console = false
      @console = Console.new
      Commands::Command.setup

      push_state(MainMenu)
    end

    def draw
      super

      @console.draw if @show_console
    end

    def update
      super

      @console.update if @show_console
    end

    def button_down(id)
      if @show_console
        @console.button_down(id)
      else
        super
      end

      if id == Gosu::KbBacktick
        @show_console ? @console.blur : @console.focus
        @show_console = !@show_console
      end
    end

    def button_up(id)
      if @show_console
        @console.button_up(id)
      else
        super
      end
    end
  end
end
