/*
    godotVmcSharp
    Copyright (C) 2023  Cassandra de la Cruz-Munoz
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.
    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see .
    */
using godotOscSharp;
namespace godotVmcSharp
{
    public class VmcExtKey : VmcMessage
    {
        public readonly int Active;
        public readonly string Name;
        public readonly int Keycode;
        public static VmcExtKey CreateFromMessage(OscMessage m)
        {
            var active = m.Data[0].GetAsInt32();
            if (active < 0 || active > 1)
            {
                throw new DataOutOfRangeException(m.Address, 0, "active", "{0, 1}", active);
            }
            return new VmcExtKey(active, m.Data[1].GetAsString(), m.Data[2].GetAsInt32());
        }
        public static VmcExtKey CreateFromParams(int active, string name, int keycode)
        {
            if (active < 0 || active > 1)
            {
                throw new DataOutOfRangeException("/VMC/Ext/Key", 0, "active", "{0, 1}", active);
            }
            return new VmcExtKey(active, name, keycode);
        }
        private VmcExtKey(int active, string name, int keycode) : base(new OscAddress("/VMC/Ext/Key"))
        {
            Active = active;
            Name = name;
            Keycode = keycode;
        }
        public new OscMessage ToMessage()
        {
            return new OscMessage(Addr, new System.Collections.Generic.List{
                OscArgument.CreateFromParams(Active, 'i')!,
                OscArgument.CreateFromParams(Name, 's')!,
                OscArgument.CreateFromParams(Keycode, 'i')!
            });
        }
    }
}