using ComputersShopContracts.BindingModels;
using ComputersShopContracts.BusinessLogicContracts;
using ComputersShopContracts.SearchModels;
using ComputersShopContracts.ViewModels;
using Microsoft.AspNetCore.Mvc;

namespace ComputersShopRestApi.Controllers
{
	[Route("api/[controller]/[action]")]
	[ApiController]
	public class MainController : Controller
	{
		private readonly ILogger _logger;

		private readonly IOrderLogic _order;

		private readonly IComputerLogic _Computer;

		public MainController(ILogger<MainController> logger, IOrderLogic order, IComputerLogic Computer)
		{
			_logger = logger;
			_order = order;
			_Computer = Computer;
		}

		[HttpGet]
		public List<ComputerViewModel>? GetComputerList()
		{
			try
			{
				return _Computer.ReadList(null);
			}
			catch (Exception ex)
			{
				_logger.LogError(ex, "Ошибка получения списка корабликов");
				throw;
			}
		}

		[HttpGet]
		public ComputerViewModel? GetComputer(int ComputerId)
		{
			try
			{
				return _Computer.ReadElement(new ComputerSearchModel { Id = ComputerId });
			}
			catch (Exception ex)
			{
				_logger.LogError(ex, "Ошибка получения корабля по id={Id}", ComputerId);
				throw;
			}
		}

		[HttpGet]
		public List<OrderViewModel>? GetOrders(int clientId)
		{
			try
			{
				return _order.ReadList(new OrderSearchModel { ClientId = clientId });
			}
			catch (Exception ex)
			{
				_logger.LogError(ex, "Ошибка получения списка заказов клиента id={Id}", clientId);
				throw;
			}
		}

		[HttpPost]
		public void CreateOrder(OrderBindingModel model)
		{
			try
			{
				_order.CreateOrder(model);
			}
			catch (Exception ex)
			{
				_logger.LogError(ex, "Ошибка создания заказа");
				throw;
			}
		}
	}
}