using UnityEngine;

public class GlobalBehaviour : MonoBehaviour, ISerializationCallbackReceiver
{
    public static GlobalBehaviour Instance
    {
        get => _Instance;
        set
        {
            if (_Instance == null) 
                _Instance = value;
            else
                Destroy(value);
        }
    }
    private static GlobalBehaviour _Instance;

    //Make sure when using RGBA-Colors, the A-value of animationStartColor 
    //and animationEndColor is the same OR try with value = 255
    public static Color hintAnimationStartColor;
    public static Color hintAnimationEndColor;
    public static float hintAnimationDuration;

    public static Color StageAccomplished;
    public static Color StageNotYetAccomplished;
    public static Color StageError;

    public static float GadgetLaserDistance;
    public static float GadgetPhysicalDistance;

    #region Unity Serialization
    [SerializeField] private Color _hintAnimationStartColor;
    [SerializeField] private Color _hintAnimationEndColor;
    [SerializeField] private float _hintAnimationDuration;

    [SerializeField] private Color _StageAccomplished;
    [SerializeField] private Color _StageNotYetAccomplished;
    [SerializeField] private Color _StageError;

    [SerializeField] private float _GadgetLaserDistance = 30f;
    [SerializeField] private float _GadgetPhysicalDistance = 2.5f;


    void ISerializationCallbackReceiver.OnAfterDeserialize()
    {
        hintAnimationStartColor = _hintAnimationStartColor;
        hintAnimationEndColor = _hintAnimationEndColor;
        hintAnimationDuration = _hintAnimationDuration;

        StageAccomplished = _StageAccomplished;
        StageNotYetAccomplished = _StageNotYetAccomplished;
        StageError = _StageError;

        GadgetLaserDistance = _GadgetLaserDistance;
        GadgetPhysicalDistance = _GadgetPhysicalDistance;
    }

    void ISerializationCallbackReceiver.OnBeforeSerialize()
    {
        _hintAnimationStartColor = hintAnimationStartColor;
        _hintAnimationEndColor = hintAnimationEndColor;
        _hintAnimationDuration = hintAnimationDuration;

        _StageAccomplished = StageAccomplished;
        _StageNotYetAccomplished = StageNotYetAccomplished;
        _StageError = StageError;

        _GadgetLaserDistance = GadgetLaserDistance;
        _GadgetPhysicalDistance = GadgetPhysicalDistance;
    }
    #endregion

    private void Awake()
    {
        Instance = this;
    }
}