namespace Giants.DataContract.V1
{
    using System;
    using System.ComponentModel.DataAnnotations;

    public class AppVersion
    {
        [Required]
        public int Build { get; set; }

        [Required]
        public int Major { get; set; }

        [Required]
        public int Minor { get; set; }

        [Required]
        public int Revision { get; set; }

        public override bool Equals(object obj)
        {
            return obj is AppVersion info &&
                   this.Build == info.Build &&
                   this.Major == info.Major &&
                   this.Minor == info.Minor &&
                   this.Revision == info.Revision;
        }

        public override int GetHashCode()
        {
            return HashCode.Combine(this.Build, this.Major, this.Minor, this.Revision);
        }

        public Version ToVersion()
        {
            return new Version(this.Major, this.Minor, this.Build, this.Revision);
        }

        public static bool operator<(AppVersion a, AppVersion b)
        {
            return a.ToVersion() < b.ToVersion();
        }

        public static bool operator>(AppVersion a, AppVersion b)
        {
            return a.ToVersion() > b.ToVersion();
        }
    }
}
