using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using OI.Metrology.Archive.Models;
using OI.Metrology.Shared.Models.Stateless;
using OI.Metrology.Shared.Repositories;
using OI.Metrology.Shared.ViewModels;
using System;
using System.Collections.Generic;

namespace OI.Metrology.Archive.Controllers;

public class PagesController : Controller
{
    private readonly bool _IsTestDatabase;
    private readonly IRdsMaxRepo _RdsMaxRepo;
    private readonly IMetrologyRepository _MetrologyRepo;

    public PagesController(AppSettings appSettings, IMetrologyRepository metrologyRepository, IRdsMaxRepo rdsMaxRepo)
    {
        _RdsMaxRepo = rdsMaxRepo;
        _MetrologyRepo = metrologyRepository;
        _IsTestDatabase = appSettings.ConnectionString.Contains("test", StringComparison.InvariantCultureIgnoreCase);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        base.OnActionExecuted(context);
        ViewBag.IsTestDatabase = _IsTestDatabase;
    }

    [HttpGet]
    [Route("/")]
    public IActionResult Index() =>
        View("RunHeaders");

    [HttpGet]
    [Route("/AwaitingDispo")]
    [Route("/Metrology/AwaitingDispo")]
    public IActionResult AwaitingDispo() =>
        View();

    [HttpGet]
    [Route("/RunInfo")]
    [Route("/Metrology/RunInfo")]
    public IActionResult RunInfo([FromQuery] int tooltypeid = 1, [FromQuery] int headerid = 0)
    {
        RunInfo m = new()
        {
            ToolTypeID = tooltypeid,
            HeaderID = headerid,
            HeaderAttachmentID = Guid.Empty,
        };
        if (headerid > 0)
        {
            m.HeaderAttachmentID = _MetrologyRepo.GetHeaderAttachmentID(tooltypeid, headerid);
        }
        return View(m);
    }

    [HttpGet]
    [Route("/RunHeaders")]
    [Route("/Metrology/RunHeaders")]
    public IActionResult RunHeaders() =>
        View();

    [HttpGet]
    [Route("/Crash")]
    public IActionResult Crash() =>
        throw new Exception("Test unhandled exception");

    [HttpGet]
    [Route("/RdsMax")]
    [Route("/Metrology/RdsMax")]
    public IActionResult RdsMax()
    {
        Shared.DataModels.RDS.Max[] collection = _RdsMaxRepo.GetMaxRDS();
        List<string[]> results = _RdsMaxRepo.Convert(collection);
        return View(results);
    }

}