#nullable enable
using System;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.ViewVariables;

namespace Content.Shared.GameObjects.Components
{
    [Serializable, NetSerializable]
    public enum ExpendableLightVisuals
    {
        State
    }

    [Serializable, NetSerializable]
    public enum ExpendableLightState
    {
        BrandNew,
        Lit,
        Fading,
        Dead
    }

    public abstract class SharedExpendableLightComponent: Component
    {
        public sealed override string Name => "ExpendableLight";

        [ViewVariables(VVAccess.ReadOnly)]
        protected ExpendableLightState CurrentState { get; set; }

        [ViewVariables]
        [DataField("turnOnBehaviourID")]
        protected string TurnOnBehaviourID { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("fadeOutBehaviourID")]
        protected string FadeOutBehaviourID { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("glowDuration")]
        protected float GlowDuration { get; set; } = 60 * 15f;

        [ViewVariables]
        [DataField("fadeOutDuration")]
        protected float FadeOutDuration { get; set; } = 60 * 5f;

        [ViewVariables]
        [DataField("spentDesc")]
        protected string SpentDesc { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("spentName")]
        protected string SpentName { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("iconStateSpent")]
        protected string IconStateSpent { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("iconStateOn")]
        protected string IconStateLit { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("litSound")]
        protected string LitSound { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("loopedSound")]
        protected string LoopedSound { get; set; } = string.Empty;

        [ViewVariables]
        [DataField("dieSound")]
        protected string DieSound { get; set; } = string.Empty;
    }
}
