using HardwareShopBusinessLogic.BusinessLogics.Storekeeper;
using HardwareShopContracts.BindingModels;
using HardwareShopContracts.BusinessLogicsContracts;
using HardwareShopContracts.SearchModels;
using HardwareShopContracts.ViewModels;
using HardwareShopDatabaseImplement.Models.Worker;
using HardwareShopDataModels.Models;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel;

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

        public BuildController(IBuildLogic buildLogic, ILogger<UserController> logger)
        {
            _logger = logger;
            _buildLogic = buildLogic;
        }

		[HttpGet]
        public List<BuildViewModel>? GetBuilds(int userId = 0)
        {
            try
            {
                if (userId == 0)
                    return _buildLogic.ReadList(null);
                return _buildLogic.ReadList(new BuildSearchModel
                {
                    UserId = userId
                });
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка получения списка сборок пользоватля");
                throw;
            }
        }

        [HttpGet]
        public BuildViewModel? GetBuild(int buildId)
        {
            try
            {       
                return _buildLogic.ReadElement(new() { Id = buildId });
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка сборки");
                throw;
            }
        }

        [HttpPost]
        public void Create(BuildBindingModel model)
        {
            try
            {
                _buildLogic.Create(model);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка сборки");
                throw;
            }
        }

        [HttpPost]
        public void Update(BuildBindingModel model)
        {
            try
            {
                _buildLogic.Update(model);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка обновления данных");
                throw;
            }
        }

        [HttpPost]
        public void DeleteBuild(BuildBindingModel model)
        {
            try
            {
                _buildLogic.Delete(model);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка удаления сборки");
                throw;
            }
        }
    }
}