using Microsoft.AspNetCore.Mvc;

namespace OI.Metrology.Server.ApiControllers;

using OI.Metrology.Shared.Models.Stateless;
using System.Text.Json;

// this controller is for the Awaiting Dispo functionality

[Route("api/[controller]")]
public class AwaitingDispoController : Controller, IAwaitingDispoController<IActionResult>
{
    private readonly IMetrologyRepository _MetrologyRepository;
    public AwaitingDispoController(IMetrologyRepository metrologyRepository) =>
        _MetrologyRepository = metrologyRepository;

    // returns the data to show in the Awaiting Dispo grid
    // marked no-cache, just-in-case since igniteUI automatically adds a query string parameter to prevent caching
    [HttpGet]
    [ResponseCache(NoStore = true)]
    public IActionResult Index() =>
        Json(_MetrologyRepository.GetAwaitingDisposition(), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });

    // this endpoint is used to set the ReviewDate column, causing the header to no longer show in Awaiting Dispo    
    [HttpPost("/api/awaitingdispo/markasreviewed")]
    public IActionResult MarkAsReviewed([FromQuery] long headerid, [FromQuery] int tooltypeid)
    {
        _ = _MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, false);
        return Ok();
    }

    // this endpoint is used to clear the ReviewDate column, causing the header to show up again
    [HttpPost("/api/awaitingdispo/markasawaiting")]
    public IActionResult MarkAsAwaiting([FromQuery] long headerid, [FromQuery] int tooltypeid)
    {
        if (_MetrologyRepository.UpdateReviewDate(tooltypeid, headerid, true) <= 1)
            return Ok();
        else
            return StatusCode(444);
    }
}