#region Using Statements
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ANX.Framework.NonXNA;

#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.InputSystem.Recording
{
    public class Creator : IInputSystemCreator
    {
        //It not a good idea to have more than one RecordingDevice per Input Device, so we cache the request.
        RecordingMouse mouse;
        RecordingKeyboard keyboard;
        RecordingGamePad gamePad;
#if XNAEXT
        RecordingMotionSensingDevice msd;
#endif

        public IGamePad GamePad
        {
            get
            {
                AddInSystemFactory.Instance.PreventSystemChange(
                    AddInType.InputSystem);
                if (gamePad == null)
                    gamePad = new RecordingGamePad();
                return gamePad;
            }
        }

        public IMouse Mouse
        {
            get
            {
                AddInSystemFactory.Instance.PreventSystemChange(
                    AddInType.InputSystem);
                if (mouse == null)
                    mouse = new RecordingMouse();
                return mouse;
            }
        }

        public IKeyboard Keyboard
        {
            get
            {
                AddInSystemFactory.Instance.PreventSystemChange(
                    AddInType.InputSystem);
                if (keyboard == null)
                    keyboard = new RecordingKeyboard();
                return keyboard;
            }
        }

#if XNAEXT
        public IMotionSensingDevice MotionSensingDevice
        {
            get
            {
                AddInSystemFactory.Instance.PreventSystemChange(
                    AddInType.InputSystem);
                if (msd == null)
                    msd = new RecordingMotionSensingDevice();
                return msd;
            }
        }
#endif

        public void RegisterCreator(AddInSystemFactory factory)
        {
            factory.AddCreator(this);
        }

        public string Name
        {
            get { return "Recording"; }
        }

        public int Priority
        {
            get { return int.MaxValue; }
        }

        public bool IsSupported
        {
            get { return true; } //This is just a proxy, so it runs on all plattforms
        }

    }
}