using Microsoft.AspNetCore.Mvc;

namespace OI.Metrology.Server.ApiControllers;

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

[Route("api/[controller]")]
public class InfinityQSV2Controller : Controller, IInfinityQSV2Controller<IActionResult>
{

    private readonly IInfinityQSV2Repository _InfinityQSRepositoryV2;

    public InfinityQSV2Controller(IInfinityQSV2Repository InfinityQSRepositoryV2) => _InfinityQSRepositoryV2 = InfinityQSRepositoryV2;

    [HttpGet("{sub_group_id}/commandText")]
    public IActionResult GetCommandText(string sub_group_id, string process, string job, string part, string lot, string date_time)
    {
        string commandText = _InfinityQSRepositoryV2.GetCommandText(sub_group_id, process, job, part, lot, date_time);
        return Content(commandText, "text/plain; charset=utf-8");
    }

    [HttpGet("{sub_group_id}/data")]
    public IActionResult GetData(string sub_group_id)
    {
        Result<InfinityQSBaseV2[]> result = _InfinityQSRepositoryV2.GetData(sub_group_id);
        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
    }

    [HttpGet("{sub_group_id}/descriptors")]
    public IActionResult GetDescriptors(string sub_group_id)
    {
        Result<InfinityQSDescriptorV2[]> result = _InfinityQSRepositoryV2.GetDescriptors(sub_group_id);
        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
    }

    [HttpGet("{sub_group_id}/events")]
    public IActionResult GetEvents(string sub_group_id)
    {
        Result<InfinityQSEventV2[]> result = _InfinityQSRepositoryV2.GetEvents(sub_group_id);
        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
    }

    [HttpGet("{sub_group_id}/header")]
    public IActionResult GetHeader(string sub_group_id)
    {
        Result<InfinityQSBaseV2[]> result = _InfinityQSRepositoryV2.GetHeader(sub_group_id);
        return Json(result, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true });
    }

}