using HPJ.Simulation.Enums;
using System.Collections;
using System.Collections.Generic;

namespace HPJ.Simulation.Utilities
{
    public static class Extensions
    {
        public static float Distance(this IntVector2 vector)
        {
            return (float)System.Math.Sqrt(vector.x * vector.x + vector.y * vector.y);
        }

        public static int SqrDistance(this IntVector2 vector)
        {
            return vector.x * vector.x + vector.y * vector.y;
        }

        public static string TilesToString(this TileTypes[] Tiles)
        {
            if (Tiles.Length == 0)
            {
                return "";
            }

            string ReturnString = "";
            for(int i = 0; i < Tiles.Length - 1; i++)
            {
                ReturnString += $"{Tiles[i]}.";
            }
            ReturnString += $"{Tiles[Tiles.Length - 1]}.";

            return ReturnString;
        }

        public static string TilesToString(this List<TileTypes> Tiles)
        {
            if (Tiles.Count == 0)
            {
                return "";
            }

            string ReturnString = "";
            for (int i = 0; i < Tiles.Count - 1; i++)
            {
                ReturnString += $"{Tiles[i]}.";
            }
            ReturnString += $"{Tiles[Tiles.Count - 1]}.";

            return ReturnString;
        }

        public static TileTypes[] StringToTilesArray(this string TilesStringArray)
        {
            string[] Split = TilesStringArray.Split('.');

            if (Split.Length == 0)
            {
                return new TileTypes[1] { TileTypes.Free };
            }

            TileTypes[] ReturnArr = new TileTypes[Split.Length];

            string[] EnumNames = System.Enum.GetNames(typeof(TileTypes));
            for (int splitIndex = 0; splitIndex < Split.Length; splitIndex++)
            {
                for(int enumIndex = 0; enumIndex < EnumNames.Length; enumIndex++)
                {
                    if (EnumNames[enumIndex] == Split[splitIndex])
                    {
                        ReturnArr[splitIndex] = (TileTypes)enumIndex;
                    }
                }
            }

            return ReturnArr;
        }
    }
}