/*
 * Source code originally from RtspClientSharp's player example:
 * https://github.com/BogdanovKirill/RtspClientSharp
 */
// ReSharper disable All
using System.Drawing;

namespace IPCamLib.FFMPEG
{
    internal class TransformParameters
    {
        public RectangleF RegionOfInterest { get; }

        public Size TargetFrameSize { get; }

        public ScalingPolicy ScalePolicy { get; }

        public PixelFormat TargetFormat { get; }

        public ScalingQuality ScaleQuality { get; }

        public TransformParameters(RectangleF regionOfInterest, Size targetFrameSize, ScalingPolicy scalePolicy,
            PixelFormat targetFormat, ScalingQuality scaleQuality)
        {
            RegionOfInterest = regionOfInterest;
            TargetFrameSize = targetFrameSize;
            TargetFormat = targetFormat;
            ScaleQuality = scaleQuality;
            ScalePolicy = scalePolicy;
        }

        protected bool Equals(TransformParameters other)
        {
            return RegionOfInterest.Equals(other.RegionOfInterest) &&
                   TargetFrameSize.Equals(other.TargetFrameSize) &&
                   TargetFormat == other.TargetFormat && ScaleQuality == other.ScaleQuality;
        }

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != GetType()) return false;
            return Equals((TransformParameters) obj);
        }

        public override int GetHashCode()
        {
            unchecked
            {
                var hashCode = RegionOfInterest.GetHashCode();
                hashCode = (hashCode * 397) ^ TargetFrameSize.GetHashCode();
                hashCode = (hashCode * 397) ^ (int) TargetFormat;
                hashCode = (hashCode * 397) ^ (int) ScaleQuality;
                return hashCode;
            }
        }
    }
}