namespace MyOffice.Core.Extensions;

using Microsoft.Extensions.Logging;

public static class StringExtensions
{
	public static bool IsMissing(this string? str)
	{
		return str == null || string.IsNullOrEmpty(str) || string.IsNullOrEmpty(str.Trim());
	}

	public static bool IsPresent(this string? str)
	{
		return !IsMissing(str);
	}

	public static string? NullIfEmpty(this string? str)
	{
		return IsMissing(str) ? null : str;
	}

	public static bool EqualsIgnoreCase(this string? str, string? value)
	{
		return str != null && str.Equals(value, StringComparison.OrdinalIgnoreCase);
	}

	public static string? SafeTrim(this string? str)
	{
		return str == null ? str : str!.Trim();
	}

	public static string? MaxOf(this string? str, int maxLength)
	{
		if (str == null)
		{
			return null;
		}

		if (str.Length < maxLength)
		{
			return str;
		}

		return str.Substring(0, maxLength);
	}

	public static bool AsBool(this string? str, bool defaultValue = false)
	{
		return true.ToString().Equals(str, StringComparison.OrdinalIgnoreCase) || defaultValue;
	}

	public static Guid AsGuid(this string str)
	{
		return Guid.Parse(str);
	}

	public static Guid? AsGuidNull(this string? str)
	{
		if (Guid.TryParse(str, out var guid))
		{
			return guid;
		}
		return null;
	}
}