using UnityEngine;

namespace Plugins.Animate_UI_Materials
{
  public interface IMaterialPropertyModifier
  {
    /// <summary>
    ///   The name of the shader property that the modifier affects
    /// </summary>
    string PropertyName { get; }

    /// <summary>
    ///   The display name of the modifier component for the editor
    /// </summary>
    string DisplayName { get; }

    /// <summary>
    ///   The "enabled" value of the modifier component
    /// </summary>
    bool enabled { get; set;  }

    /// <summary>
    ///   The "gameObject" value of the modifier component
    /// </summary>
    GameObject gameObject { get; }

    /// <summary>
    ///   Apply the modified property to the material
    /// </summary>
    /// <param name="material"></param>
    void ApplyModifiedProperty(Material material);

    /// <summary>
    /// Try to retrieve and apply the default property value
    /// If the source material cannot be found, reset to sensible defaults
    /// </summary>
    void ResetPropertyToDefault();
  }
}