namespace MoreMountains.Tools
{
	/// <summary>
	/// An interface classes that want to be saved by the MMPersistencyManager need to implement 
	/// </summary>
    public interface IMMPersistent
    {
	    /// <summary>
	    /// Needs to return a unique Guid used to identify this object 
	    /// </summary>
	    /// <returns></returns>
	    string GetGuid();
	    
	    /// <summary>
	    /// Returns a savable string containing the object's data
	    /// </summary>
	    /// <returns></returns>
	    string OnSave();

	    /// <summary>
	    /// Loads the object's data from the passed string and applies it to its properties
	    /// </summary>
	    /// <param name="data"></param>
	    void OnLoad(string data);

	    /// <summary>
	    /// Whether or not this object should be saved
	    /// </summary>
	    /// <returns></returns>
	    bool ShouldBeSaved();
    }
}