using FSO.Server.Api.Core.Utils;
using FSO.Server.Common;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System.Net;

namespace FSO.Server.Api.Core.Controllers.Admin
{
    [EnableCors("AdminAppPolicy")]
    [Route("admin/shards")]
    [ApiController]
    public class AdminShardsController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            var api = Api.INSTANCE;
            api.DemandAdmin(Request);

            using (var db = api.DAFactory.Get())
            {
                var shards = db.Shards.All();
                return ApiResponse.Json(HttpStatusCode.OK, shards);
            }
        }

        [HttpPost("shutdown")]
        public IActionResult shutdown(ShutdownModel sd)
        {
            var api = Api.INSTANCE;
            api.DemandAdmin(Request);

            ShutdownType type = ShutdownType.SHUTDOWN;
            if (sd.update) type = ShutdownType.UPDATE;
            else if (sd.restart) type = ShutdownType.RESTART;

            api.RequestShutdown((uint)sd.timeout, type);

            return ApiResponse.Json(HttpStatusCode.OK, true);
        }

        [HttpPost("announce")]
        public IActionResult announce(AnnouncementModel an)
        {
            var api = Api.INSTANCE;
            api.DemandModerator(Request);

            api.BroadcastMessage(an.sender, an.subject, an.message);

            return ApiResponse.Json(HttpStatusCode.OK, true);
        }
    }

    public class AnnouncementModel
    {
        public string sender;
        public string subject;
        public string message;
        public int[] shard_ids;
    }

    public class ShutdownModel
    {
        public int timeout;
        public bool restart;
        public bool update;
        public int[] shard_ids;
    }
}