using Microsoft.AspNetCore.Mvc;
using MQTTnet;
using backend.Application;
using backend.Models;
using backend.Middleware;

namespace backend.Controllers;

[ApiController]
public class DispenserController : ControllerBase
{
    [HttpPost("Dispense")]
	[MiddlewareFilter(typeof(AuthenticationMiddlewareBuilder))]
    public IActionResult Dispense()
    {
		var user = ApplicationState.DbContext!.Users.FirstOrDefault(user => user.SessionToken == Request.Cookies["session"]!.ToString());
		if (user == null) {
			return BadRequest("Invalid session token");
		}
		if (user.Dispenses == 0 && !user.IsParent) {
			Console.WriteLine("Poorfag");
			return BadRequest("Not enough dispenses on account");
		}
		
		user.Dispenses--;
		Console.WriteLine("Dispensing..");

		var message = new MqttApplicationMessageBuilder()
			.WithTopic("dispense")
			.WithPayload("dispense")
			.Build();

		ApplicationState.DbContext!.Add(new DispenserLog { Timestamp = DateTime.Now });
		ApplicationState.DbContext!.SaveChanges();

		ApplicationState.MqttClient!.PublishAsync(message, CancellationToken.None);
		return Ok();
    }
}
