namespace TanksServer.GameLogic;

internal sealed class EmptyTileFinder(
    MapEntityManager entityManager,
    MapService mapService
)
{
    public TilePosition ChooseEmptyTile()
    {
        var maxMinDistance = 0d;
        TilePosition spawnTile = default;
        for (ushort x = 1; x < MapService.TilesPerRow - 1; x++)
        for (ushort y = 1; y < MapService.TilesPerColumn - 1; y++)
        {
            var tile = new TilePosition(x, y);
            if (mapService.Current.IsWall(tile))
                continue;

            var tilePixelCenter = tile.GetCenter().ToFloatPosition();
            var minDistance = entityManager.AllEntities
                .Select(entity => entity.Position.Distance(tilePixelCenter))
                .Aggregate(double.MaxValue, Math.Min);
            if (minDistance <= maxMinDistance)
                continue;

            maxMinDistance = minDistance;
            spawnTile = tile;
        }

        return spawnTile;
    }
}