using System;

namespace RecrownedGTK.Types
{
    /// <summary>
    /// Holds a width and height while allowing for easier comparison between other <see cref="Resolution"/>s.
    /// </summary>
    public struct Resolution : IComparable<Resolution>
    {
        /// <summary>
        /// Dimensions of resolution.
        /// </summary>
        public int Width, Height;

        /// <summary>
        /// Constructs resolution given the dimensions.
        /// </summary>
        /// <param name="width">Width of resolution.</param>
        /// <param name="height">Height of resolution.</param>
        public Resolution(int width, int height)
        {
            Width = width;
            Height = height;
        }

        /// <summary>
        /// Compares area of this resolution to another.
        /// </summary>
        /// <param name="other">The other resolution to compare to.</param>
        /// <returns>A value less than 0 for this being the smaller resolution, 0 for the two being the same in area, and larger for this being the larger in area.</returns>
        public int CompareTo(Resolution other)
        {
            return Area() - other.Area();
        }

        /// <summary>
        /// Gets a string representation of this resolution.
        /// </summary>
        /// <returns>"WidthxHeight"</returns>
        public override string ToString()
        {
            return Width + "x" + Height;
        }

        /// <summary>
        /// Calculates area of resolution.
        /// </summary>
        /// <returns>Area of resolution.</returns>
        public int Area()
        {
            return Width * Height;
        }
    }
}