using AsbCloudApp.Data;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;

namespace AsbCloudApp.Comparators
{
    /// <summary>
    /// Компаратор для сравнения сущностей по ID
    /// </summary>
    public class ComparerIId : IComparer<IId>, IEqualityComparer<IId>
    {
        private static readonly ComparerIId instance = new();
        private ComparerIId() { }

        /// <summary>
        /// Singleton ссылка
        /// </summary>
        /// <returns></returns>
        public static ComparerIId GetInstance() => instance;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public int Compare(IId? x, IId? y)
            => (x?.Id??0).CompareTo(y?.Id??0);
        

        /// <summary>
        /// 
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public bool Equals(IId? x, IId? y)
        {            
            if (x is not null && y is not null)
                return x.Id == y.Id;

            return x == y;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public int GetHashCode([DisallowNull] IId obj) =>
            obj.GetHashCode();

    }
}