namespace Monitoring.Core.Domain.AssetManagement;

/// <summary>
/// Комментарий к объекту
/// </summary>
public record AssetComment
{
	/// <summary>
	/// Максимальная длина комментария
	/// </summary>
	public const int MaxLength = 1000;

	/// <summary>
	/// Значение комментария
	/// </summary>
	public string Value { get; }

	private AssetComment(string value)
	{
		Value = value;
	}

	/// <summary>
	/// Создать комментарий
	/// </summary>
	/// <param name="value">Значение комментария</param>
	/// <returns>Комментарий</returns>
	/// <exception cref="ArgumentException">Если значение невалидно</exception>
	public static AssetComment Create(string value)
	{
		if (string.IsNullOrWhiteSpace(value))
		{
			return new AssetComment(string.Empty);
		}

		if (value.Length > MaxLength)
		{
			throw new ArgumentException($"Комментарий не может быть длиннее {MaxLength} символов", nameof(value));
		}

		return new AssetComment(value.Trim());
	}

	public static implicit operator string(AssetComment comment) => comment.Value;
}