using System.Text;
using AutoSaverPlugin.Contracts;
using AutoSaverPlugin.Shared;
using Godot;
namespace AutoSaverPlugin.UI;
///
/// Builds and manages the toggle button for the Auto Save feature in the top menu.
///
public class AutoSaveToggleMenuBuilder
{
private CheckButton _autoSaveToggleButton;
private readonly IAutoSaveManager _autoSaveManager = ServiceProvider.GetService();
private readonly IConfigurationManager _configManager = ServiceProvider.GetService();
///
/// Initializes a new instance of the class.
///
public AutoSaveToggleMenuBuilder()
{
Build();
}
///
/// Gets the Auto Save toggle button with configured settings and event handlers.
///
public CheckButton AutoSaveToggleButton => Build();
///
/// Creates and initializes the Auto Save toggle button for the top menu.
///
/// The initialized Auto Save toggle button.
private CheckButton Build()
{
if (_autoSaveToggleButton != null)
return _autoSaveToggleButton;
_autoSaveToggleButton = new CheckButton
{
Text = "Auto Save"
};
_autoSaveToggleButton.Toggled += HandleAutoSaveToggleChanged;
_autoSaveToggleButton.SetPressedNoSignal(_configManager.IsAutoSaverEnabled);
return _autoSaveToggleButton;
}
///
/// Detaches the toggle event subscriptions to prevent memory leaks.
///
internal void DetachAutoSaveToggleEvents()
{
_autoSaveToggleButton.Toggled -= HandleAutoSaveToggleChanged;
}
///
/// Handles changes to the Auto Save toggle, updating settings and service state accordingly.
///
/// Indicates whether the feature is being enabled or disabled.
private void HandleAutoSaveToggleChanged(bool toggledOn)
{
_configManager.SetAutoSaverEnabled(enabled: toggledOn);
_configManager.SaveSettings();
if (toggledOn)
{
_autoSaveManager.Reactivate();
}
else
{
_autoSaveManager.Deactivate();
}
}
///
/// Updates the toggle state based on external settings invocation.
///
/// The trace builder for logging.
/// Indicates the new enabled state.
internal void UpdateToggleStateFromSettings(bool enabled)
{
_autoSaveToggleButton.SetPressedNoSignal(enabled);
}
}