#region Using Statements
using System;
using ANX.Framework.NonXNA.Development;

#endregion

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace ANX.Framework
{
    [PercentageComplete(100)]
    [Developer("Glatzemann")]
    [TestState(TestStateAttribute.TestState.Untested)]
    public abstract class GameHost
    {
        internal event EventHandler<EventArgs> Activated;
        internal event EventHandler<EventArgs> Deactivated;
        internal event EventHandler<EventArgs> Exiting;
        internal event EventHandler<EventArgs> Idle;
        internal event EventHandler<EventArgs> Resume;
        internal event EventHandler<EventArgs> Suspend;

        public abstract GameWindow Window { get; }

        public GameHost()
        {
        }

        public abstract void Run();
        public abstract void Exit();

        protected void OnActivated()
        {
            InvokeIfNotNull(this.Activated);
        }

        protected void OnDeactivated()
        {
            InvokeIfNotNull(this.Deactivated);
        }

        protected void OnIdle()
        {
            InvokeIfNotNull(this.Idle);
        }

        protected void OnExiting()
        {
            InvokeIfNotNull(this.Exiting);
        }

        private void InvokeIfNotNull(EventHandler<EventArgs> eventHandler)
        {
            if (eventHandler != null)
                eventHandler(this, EventArgs.Empty);
        }
    }
}