using Microsoft.AspNetCore.Mvc;
using SharedLibraryCore;
using SharedLibraryCore.Interfaces;
using System.Linq;

namespace WebfrontCore.Controllers.API;

public class ApiController : BaseController
{
    public ApiController(IManager manager) : base(manager)
    {

    }

    public IActionResult Index()
    {
        return Ok("IW4MAdmin API");
    }

    [HttpGet]
    public IActionResult Event()
    {
        return NotFound("This API endpoint is no longer supported");
    }

    [HttpGet]
    public IActionResult Status(long? id)
    {
        var serverInfo = Manager.GetServers()
            .Select(server => new
            {
                Id = server.EndPoint,
                IsOnline = !server.Throttled,
                Name = server.ServerName,
                MaxPlayers = server.MaxClients,
                CurrentPlayers = server.GetClientsAsList().Count,
                Map = server.CurrentMap,
                GameMode = server.Gametype,
                server.ListenAddress,
                server.ListenPort,
                Game = server.GameName.ToString(),
                Players = server.GetClientsAsList()
                    .Select(player => new
                    {
                        player.Name,
                        player.Score,
                        player.Ping,
                        State = player.State.ToString(),
                        player.ClientNumber,
                        ConnectionTime = player.ConnectionLength,
                        Level = player.Level.ToLocalizedLevelName(),
                    })
            });

        if (id != null)
        {
            serverInfo = serverInfo.Where(server => server.Id == id);
        }

        return Json(serverInfo);
    }
}