using System;
using UnityEngine;
using System.Collections;

namespace DldUtil
{
	public static class UnityVersion
	{
		

		public static void GetUnityVersionNumbers(string unityVersionString, out int major, out int minor, out int patch)
		{
			var splits = unityVersionString.Split(new[] {"Unity", ".", "a", "b", "rc", "f"}, StringSplitOptions.RemoveEmptyEntries);
			
			major = -1;
			minor = -1;
			patch = -1;

			if (splits.Length >= 1)
			{
				int.TryParse(splits[0], out major);
			}

			if (splits.Length >= 2)
			{
				int.TryParse(splits[1], out minor);
			}

			if (splits.Length >= 3)
			{
				int.TryParse(splits[2], out patch);
			}
		}
		
		public static void GetUnityVersionNumbers(out int major, out int minor, out int patch)
		{
			GetUnityVersionNumbers(Application.unityVersion, out major, out minor, out patch);

			//Debug.LogFormat("major: {0}, minor: {1}, patch: {2}", major, minor, patch);
		}

		public static bool IsUnityVersionAtLeast(int majorAtLeast, int minorAtLeast, int patchAtLeast)
		{
			int unityMajor;
			int unityMinor;
			int unityPatch;

			GetUnityVersionNumbers(out unityMajor, out unityMinor, out unityPatch);

			return (unityMajor >= majorAtLeast) && (unityMinor >= minorAtLeast) && (unityPatch >= patchAtLeast);
		}

		public static bool IsUnityVersionAtMost(int majorAtMost, int minorAtMost, int patchAtMost)
		{
			int unityMajor;
			int unityMinor;
			int unityPatch;

			GetUnityVersionNumbers(out unityMajor, out unityMinor, out unityPatch);

			return (unityMajor <= majorAtMost) && (unityMinor <= minorAtMost) && (unityPatch <= patchAtMost);
		}


		public static bool IsUnityVersionAtLeast(string unityVersionString, int majorAtLeast, int minorAtLeast, int patchAtLeast)
		{
			int unityMajor;
			int unityMinor;
			int unityPatch;

			GetUnityVersionNumbers(unityVersionString, out unityMajor, out unityMinor, out unityPatch);

			return (unityMajor >= majorAtLeast) && (unityMinor >= minorAtLeast) && (unityPatch >= patchAtLeast);
		}

		public static bool IsUnityVersionAtMost(string unityVersionString, int majorAtMost, int minorAtMost, int patchAtMost)
		{
			int unityMajor;
			int unityMinor;
			int unityPatch;

			GetUnityVersionNumbers(unityVersionString, out unityMajor, out unityMinor, out unityPatch);

			return (unityMajor <= majorAtMost) && (unityMinor <= minorAtMost) && (unityPatch <= patchAtMost);
		}
	}
}