﻿using System;
using UnityEngine;

namespace Mapbox.Examples.Voxels
{
	public class VoxelFetcher : MonoBehaviour
	{
		[SerializeField]
		VoxelColorMapper[] _voxels;

		public GameObject GetVoxelFromColor(Color color)
		{
			GameObject matchingVoxel = _voxels[0].Voxel;
			var minDistance = Mathf.Infinity;
			foreach (var voxel in _voxels)
			{
				var distance = GetDistanceBetweenColors(voxel.Color, color);
				if (distance < minDistance)
				{
					matchingVoxel = voxel.Voxel;
					minDistance = distance;
				}
			}
			return matchingVoxel;
		}

		public static float GetDistanceBetweenColors(Color color1, Color color2)
		{
			return Mathf.Sqrt(Mathf.Pow(color1.r - color2.r, 2f) + Mathf.Pow(color1.g - color2.g, 2f) + Mathf.Pow(color1.b - color2.b, 2f));
		}
	}

	[Serializable]
	public class VoxelColorMapper
	{
		public Color Color;
		public GameObject Voxel;
	}
}
