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 InfinityQSV3Controller : Controller, IInfinityQSV3Controller<IActionResult>
{

    private readonly IInfinityQSV3Repository _InfinityQSRepositoryV3;

    public InfinityQSV3Controller(IInfinityQSV3Repository InfinityQSRepositoryV3) => _InfinityQSRepositoryV3 = InfinityQSRepositoryV3;

    [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 = _InfinityQSRepositoryV3.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<InfinityQSV3[]> result = _InfinityQSRepositoryV3.GetData(sub_group_id);
        string json = JsonSerializer.Serialize(result, ResultInfinityQSV3SourceGenerationContext.Default.ResultInfinityQSV3Array);
        return Content(json, "application/json", System.Text.Encoding.UTF8);
    }

    [HttpGet("{sub_group_id}/descriptors")]
    public IActionResult GetDescriptors(string sub_group_id)
    {
        Result<InfinityQSDescriptorV3[]> result = _InfinityQSRepositoryV3.GetDescriptors(sub_group_id);
        string json = JsonSerializer.Serialize(result, ResultInfinityQSDescriptorV3SourceGenerationContext.Default.ResultInfinityQSDescriptorV3Array);
        return Content(json, "application/json", System.Text.Encoding.UTF8);
    }

    [HttpGet("{sub_group_id}/header")]
    public IActionResult GetHeader(string sub_group_id)
    {
        Result<InfinityQSV3[]> result = _InfinityQSRepositoryV3.GetHeader(sub_group_id);
        string json = JsonSerializer.Serialize(result, ResultInfinityQSV3SourceGenerationContext.Default.ResultInfinityQSV3Array);
        return Content(json, "application/json", System.Text.Encoding.UTF8);
    }

    [HttpGet("{process}/product-data-average-sum-of-defects-process-mean-process-sigma")]
    public IActionResult GetProductDataAverageSumOfDefectsProcessMeanProcessSigma(string process, string? recipe)
    {
        string result = _InfinityQSRepositoryV3.GetProductDataAverageSumOfDefectsProcessMeanProcessSigma(process, recipe);
        return Content(result, "application/json", System.Text.Encoding.UTF8);
    }

    [HttpGet("epi-pro-temp-verification")]
    public IActionResult GetEpiProTempVerification()
    {
        string result = _InfinityQSRepositoryV3.GetEpiProTempVerification();
        return Content(result, "text/html", System.Text.Encoding.UTF8);
    }

}