using ElectronicsShopContracts.BindingModels;
using ElectronicsShopContracts.BusinessLogicContracts;
using ElectronicsShopContracts.SearchModels;
using ElectronicsShopContracts.ViewModels;
using ElectronicsShopDataBaseImplement.Models;
using Microsoft.AspNetCore.Mvc;

namespace ElectronicsShopRestAPI.Controllers {

	[Route("api/[controller]/[action]")]
	[ApiController]
    public class MainController : Controller {

        private readonly ILogger _logger;
        private readonly IProductLogic _product;
        private readonly IOrderLogic _order;

        public MainController(ILogger<MainController> logger, IProductLogic product, IOrderLogic orderLogic) {
            _logger = logger;
            _product = product;
            _order = orderLogic;
        }

        [HttpGet]
        public List<ProductViewModel>? GetProductList() {
            //tdoo
            return null;
        }

        [HttpGet]
        public ProductViewModel? GetProduct(int ProductID) {
           return null;
        }


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

        [HttpGet]
        public List<ProductViewModel>? GetProducts() {
            try {
                return _product.ReadList(null);
            }
            catch (Exception ex) {
                _logger.LogError(ex, $"Ошибка получения данных");
                throw;
            }
        }

        [HttpPost]
        public void CreateOrder(OrderBindingModel model) {
            return;
        }

        [HttpPost]
        public void CreateProduct(OrderBindingModel model) {
            return;
        }

        //Мейби нужны будут удаления, обновления, выбор конкретного заказа или продукта. Короче потом....
    }
}