#nullable enable
using System;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization;

namespace Content.Shared.GameObjects.Components.Power.AME
{
    public class SharedAMEControllerComponent : Component
    {
        public override string Name => "AMEController";

        [Serializable, NetSerializable]
        public class AMEControllerBoundUserInterfaceState : BoundUserInterfaceState
        {
            public readonly bool HasPower;
            public readonly bool IsMaster;
            public readonly bool Injecting;
            public readonly bool HasFuelJar;
            public readonly int FuelAmount;
            public readonly int InjectionAmount;
            public readonly int CoreCount;

            public AMEControllerBoundUserInterfaceState(bool hasPower, bool isMaster, bool injecting, bool hasFuelJar, int fuelAmount, int injectionAmount, int coreCount)
            {
                HasPower = hasPower;
                IsMaster = isMaster;
                Injecting = injecting;
                HasFuelJar = hasFuelJar;
                FuelAmount = fuelAmount;
                InjectionAmount = injectionAmount;
                CoreCount = coreCount;
            }
        }

        [Serializable, NetSerializable]
        public class UiButtonPressedMessage : BoundUserInterfaceMessage
        {
            public readonly UiButton Button;

            public UiButtonPressedMessage(UiButton button)
            {
                Button = button;
            }
        }

        [Serializable, NetSerializable]
        public enum AMEControllerUiKey
        {
            Key
        }

        public enum UiButton
        {
            Eject,
            ToggleInjection,
            IncreaseFuel,
            DecreaseFuel,
            RefreshParts
        }

        [Serializable, NetSerializable]
        public enum AMEControllerVisuals
        {
            DisplayState,
        }
    }
}
