using Microsoft.AspNetCore.Mvc;
using Serilog;
using WorkFlowCheck.BL.Services;
using WorkFlowCheck.BL.Services.Interfaces;
using WorkFlowCheck.Common.DTO;

namespace WorkFlowCheck.API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class SyncController : ControllerBase
    {
        private ISyncService _syncService;
        public SyncController(ISyncService syncService)
        {
            _syncService = syncService;
        }

        [HttpGet("GetAllCheckPoints")]
        public async Task<ApiResponseDTO<List<CheckPointDTO>>> GetAllCheckpointsAsync()
        {
            var retVal = new ApiResponseDTO<List<CheckPointDTO>>()
            {
                IsSuccess = true,
            };
            var checkPointListDTO = await _syncService.GetAllCheckPointAsync();

            if (checkPointListDTO != null)
            {

                retVal.IsSuccess = true;
                retVal.Data = checkPointListDTO;
            }
            else
            {
                retVal.IsSuccess = false;
                retVal.Errors.Add("No data!");
            }

            return retVal;
        }

        [HttpGet("GetCheckPoints/{id}")]
        public async Task<ApiResponseDTO<CheckPointDTO>> GetCheckpointsAsync(int id)
        {
            var retVal = new ApiResponseDTO<CheckPointDTO>()
            {
                IsSuccess = true,
            };
            var checkPointListDTO = await _syncService.GetCheckPointAsync(id);

            if (checkPointListDTO != null)
            {

                retVal.IsSuccess = true;
                retVal.Data = checkPointListDTO;
            }
            else
            {
                retVal.IsSuccess = false;
                retVal.Errors.Add("No data!");
            }

            return retVal;
        }

        [HttpGet("GetAllEquipments")]
        public async Task<ApiResponseDTO<List<EquipmentDTO>>> GetAllEquipmentsAsync()
        {
            var retVal = new ApiResponseDTO<List<EquipmentDTO>>()
            {
                IsSuccess = true,
            };
            var equipmentListDTO = await _syncService.GetAllEquipmentAsync();

            if (equipmentListDTO != null)
            {

                retVal.IsSuccess = true;
                retVal.Data = equipmentListDTO;
            }
            else
            {
                retVal.IsSuccess = false;
                retVal.Errors.Add("No data!");
            }

            return retVal;
        }

        [HttpGet("GetAllLocations")]
        public async Task<ApiResponseDTO<List<LocationDTO>>> GetAllLocationsAsync()
        {
            var retVal = new ApiResponseDTO<List<LocationDTO>>()
            {
                IsSuccess = true,
            };
            var locationListDTO = await _syncService.GetAllLocationAsync();

            if (locationListDTO != null)
            {

                retVal.IsSuccess = true;
                retVal.Data = locationListDTO;
            }
            else
            {
                retVal.IsSuccess = false;
                retVal.Errors.Add("No data!");
            }

            return retVal;
        }

        [HttpGet("GetAllCheckListTemplateHeader")]
        public async Task<ApiResponseDTO<List<CheckListTemplateHeaderDTO>>> GetAllCheckListTemplateHeaderAsync()
        {
            var retVal = new ApiResponseDTO<List<CheckListTemplateHeaderDTO>>()
            {
                IsSuccess = true,
            };
            var response = await _syncService.GetAllCheckListTemplateAsync();

            if (response != null)
            {

                retVal.IsSuccess = true;
                retVal.Data = response;
            }
            else
            {
                retVal.IsSuccess = false;
                retVal.Errors.Add("No data!");
            }

            return retVal;
        }

        [HttpPost("UpdateCheckPoint")]
        public async Task<ApiResponseDTO<CheckPointDTO>> UpdateCheckPoint([FromBody] CheckPointDTO checkPointDTO)
        {
            var retVal = new ApiResponseDTO<CheckPointDTO>()
            {
                IsSuccess = true
            };

            try
            {
                var result = await _syncService.UpdateCheckPointAsync(checkPointDTO);
                retVal.Data = result;

            }
            catch (Exception ex)
            {
                retVal.IsSuccess = false;
                Log.Error(ex.Message);
            }
            return retVal;
        }
    }
}
