using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace StarEngine.Core
{
    /// <summary>
    /// 入力機器のためのメソッドを提供します。
    /// </summary>
    public interface IInput
    {
        /// <summary>
        /// 押されているキーボードのキーの配列を取得します。
        /// </summary>
        /// <param name="duration">1 回目判定の保持時間。 -1 のときは無限。</param>
        /// <param name="delay">2 回目判定までの遅延時間。 -1 のときは無限。</param>
        /// <param name="interval">2 回目以降の判定の時間間隔。</param>
        /// <returns>Keys 列挙型の配列。</returns>
        Keys[] GetPressedKeyboardKeys(int duration, int delay, int interval);

        /// <summary>
        /// 押されているゲームパッドのボタン番号の配列を取得します。
        /// </summary>
        /// <param name="deviceNumber">デバイス番号。</param>
        /// <param name="duration">1 回目判定の保持時間。 -1 のときは無限。</param>
        /// <param name="delay">2 回目判定までの遅延時間。 -1 のときは無限。</param>
        /// <param name="interval">2 回目以降の判定の時間間隔。</param>
        /// <returns>ボタン番号の配列。</returns>
        int[] GetPressedGamePadButtons(int deviceNumber, int duration, int delay, int interval);

        /// <summary>
        /// 押されているゲームパッドの方向キーの配列を取得します。
        /// </summary>
        /// <param name="deviceNumber">デバイス番号。</param>
        /// <param name="duration">1 回目判定の保持時間。 -1 のときは無限。</param>
        /// <param name="delay">2 回目判定までの遅延時間。 -1 のときは無限。</param>
        /// <param name="interval">2 回目以降の判定の時間間隔。</param>
        /// <returns>GamePadDirection 列挙型。</returns>
        GamePadDirections GetPressedGamePadDirections(int deviceNumber, int duration, int delay, int interval);

        /// <summary>
        /// 有効なゲームパッド数を取得します。
        /// </summary>
        int GamePadCount { get; }

        /// <summary>
        /// 押されているマウスのボタンを取得します。
        /// </summary>
        /// <param name="duration">1 回目判定の保持時間。 -1 のときは無限。</param>
        /// <param name="delay">2 回目判定までの遅延時間。 -1 のときは無限。</param>
        /// <param name="interval">2 回目以降の判定の時間間隔。</param>
        /// <remarks>MouseButtons 列挙型。</remarks>
        MouseButtons GetPressedMouseButtons(int duration, int delay, int interval);

        /// <summary>
        /// マウスカーソルの座標を取得します。
        /// </summary>
        Point MouseLocation { get; }
    }
}
