using System;

public class KeyframeToggleContext : IDisposable
{
    private IKeyframeSetter _keyframmable;
    private bool _enableKeyframes;

    public KeyframeToggleContext(IKeyframeSetter keyframmable, bool enableKeyframes = false)
    {
        _keyframmable = keyframmable;
        _enableKeyframes = enableKeyframes;
        Toggle(true);
    }

    public void ForceSetKeyframe(int frameNum = -1)
    {
        Toggle(false);
        _keyframmable.SetKeyframe(frameNum);
        Toggle(true);
    }

    public void Dispose()
    {
        Toggle(false);
    }

    private void Toggle(bool on)
    {
        if (on)
        {
            if (_enableKeyframes) _keyframmable.EnableKeyframeSet();
            else _keyframmable.DisableKeyframeSet();
        }
        else
        {
            if (_enableKeyframes) _keyframmable.DisableKeyframeSet();
            else _keyframmable.EnableKeyframeSet();
        }
    }
}