using Microsoft.AspNetCore.Mvc;
using ReportingServices.Shared.Models.PlanningReport;
using ReportingServices.Shared.Models.ProductionReport;
using ReportingServices.Shared.Repositories;
using ReportingServices.Shared.ViewModels.ProductionReport;

namespace ReportingServices.API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ScrapeDBController : ControllerBase
    {
        private readonly IScrapeDatabaseRepository _scrapeDBRepository;

        public ScrapeDBController(IScrapeDatabaseRepository scrapeDBRepository)
        {
            _scrapeDBRepository = scrapeDBRepository;
        }

        [HttpGet("ReactorOuts")]
        public YieldInformation GetReactorOuts(string startDate, string endDate)
        {
            List<ReactorOutsByRDS> outs = _scrapeDBRepository.GetRDSRunBetweenDates(startDate, endDate);
            YieldInformation yieldInformation = new()
            {
                Outs = outs,
                Scrap = _scrapeDBRepository.GetScrapByDay(outs)
            };

            return yieldInformation;
        }

        [HttpGet("PSNWO")]
        public List<ReactorPSNWORuns> GetReactorPSNWORuns(string startDate, string endDate)
        {
            return _scrapeDBRepository.GetReactorPSNWORuns(startDate, endDate);
        }

        [HttpGet("PartChanges")]
        public int GetNumberOfPartChanges(string startDate, string endDate)
        {
            return _scrapeDBRepository.GetNumberOfPartChanges(startDate, endDate);
        }

        [HttpGet("Targets")]
        public QuarterlyTargets GetQuarterlyTargets()
        {
            return _scrapeDBRepository.GetQuarterlyTargets();
        }

        [HttpGet("Reactors")]
        public List<Reactor> GetReactors()
        {
            return _scrapeDBRepository.GetReactors();
        }

        [HttpGet("RDS")]
        public List<RDS> GetRDSForLastDay(string date)
        {
            return _scrapeDBRepository.GetRDSForLastDay(date);
        }

        [HttpGet("ReactorEvents")]
        public List<ReactorEvent> GetReactorEvents(string startDate, string endDate, string reactorNumber)
        {
            return _scrapeDBRepository.GetReactorEvents(startDate, endDate, reactorNumber);
        }

        [HttpGet("ToolEvents")]
        public ToolEvent GetLatestToolEvent(string toolID)
        {
            return _scrapeDBRepository.GetLatestToolEvent(toolID);
        }
    }
}
