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

namespace Content.Shared.GameObjects.Components
{
    [NetSerializable, Serializable]
    public enum ParticleAcceleratorVisuals
    {
        VisualState
    }

    [NetSerializable, Serializable]
    public enum ParticleAcceleratorVisualState
    {
        //Open, //no prefix
        //Wired, //w prefix
        Unpowered, //c prefix
        Powered, //p prefix
        Level0, //0 prefix
        Level1, //1 prefix
        Level2, //2 prefix
        Level3 //3 prefix
    }

    [NetSerializable, Serializable]
    public enum ParticleAcceleratorPowerState
    {
        Standby = ParticleAcceleratorVisualState.Powered,
        Level0 = ParticleAcceleratorVisualState.Level0,
        Level1 = ParticleAcceleratorVisualState.Level1,
        Level2 = ParticleAcceleratorVisualState.Level2,
        Level3 = ParticleAcceleratorVisualState.Level3
    }

    public enum ParticleAcceleratorVisualLayers
    {
        Base,
        Unlit
    }

    [Serializable, NetSerializable]
    public enum ParticleAcceleratorWireStatus
    {
        Power,
        Keyboard,
        Limiter,
        Strength,
    }

    [NetSerializable, Serializable]
    public class ParticleAcceleratorUIState : BoundUserInterfaceState
    {
        public bool Assembled;
        public bool Enabled;
        public ParticleAcceleratorPowerState State;
        public int PowerDraw;
        public int PowerReceive;

        //dont need a bool for the controlbox because... this is sent to the controlbox :D
        public bool EmitterLeftExists;
        public bool EmitterCenterExists;
        public bool EmitterRightExists;
        public bool PowerBoxExists;
        public bool FuelChamberExists;
        public bool EndCapExists;

        public bool InterfaceBlock;
        public ParticleAcceleratorPowerState MaxLevel;
        public bool WirePowerBlock;

        public ParticleAcceleratorUIState(bool assembled, bool enabled, ParticleAcceleratorPowerState state, int powerReceive, int powerDraw, bool emitterLeftExists, bool emitterCenterExists, bool emitterRightExists, bool powerBoxExists, bool fuelChamberExists, bool endCapExists, bool interfaceBlock, ParticleAcceleratorPowerState maxLevel, bool wirePowerBlock)
        {
            Assembled = assembled;
            Enabled = enabled;
            State = state;
            PowerDraw = powerDraw;
            PowerReceive = powerReceive;
            EmitterLeftExists = emitterLeftExists;
            EmitterCenterExists = emitterCenterExists;
            EmitterRightExists = emitterRightExists;
            PowerBoxExists = powerBoxExists;
            FuelChamberExists = fuelChamberExists;
            EndCapExists = endCapExists;
            InterfaceBlock = interfaceBlock;
            MaxLevel = maxLevel;
            WirePowerBlock = wirePowerBlock;
        }
    }

    [NetSerializable, Serializable]
    public class ParticleAcceleratorSetEnableMessage : BoundUserInterfaceMessage
    {
        public readonly bool Enabled;
        public ParticleAcceleratorSetEnableMessage(bool enabled)
        {
            Enabled = enabled;
        }
    }

    [NetSerializable, Serializable]
    public class ParticleAcceleratorRescanPartsMessage : BoundUserInterfaceMessage
    {
        public ParticleAcceleratorRescanPartsMessage()
        {
        }
    }

    [NetSerializable, Serializable]
    public class ParticleAcceleratorSetPowerStateMessage : BoundUserInterfaceMessage
    {
        public readonly ParticleAcceleratorPowerState State;

        public ParticleAcceleratorSetPowerStateMessage(ParticleAcceleratorPowerState state)
        {
            State = state;
        }
    }

    [NetSerializable, Serializable]
    public enum ParticleAcceleratorControlBoxUiKey
    {
        Key
    }
}
