using Microsoft.AspNetCore.Mvc;
using ComputerHardwareStoreContracts.BindingModels;
using ComputerHardwareStoreContracts.SearchModels;
using ComputerHardwareStoreContracts.StorageContracts;

namespace ComputerHardwareStoreREST.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class StoreKeepersController : Controller
    {
        private readonly ILogger<StoreKeepersController> _logger;
        private readonly IStoreKeeperStorage _storage;

        public StoreKeepersController(ILogger<StoreKeepersController> logger, IStoreKeeperStorage storage)
        {
            _logger = logger;
            _storage = storage;
        }

        [HttpPost("get/filter")]
        public IActionResult GetByFilter([FromBody] StoreKeeperSearchModel model)
        {
            try
            {
                var result = _storage.GetFilteredList(model);
                return Ok(result);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        [HttpPost("get")]
        public IActionResult GetById([FromBody] StoreKeeperSearchModel model)
        {
            try
            {
                var result = _storage.GetElement(model);
                return Ok(result);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        [HttpPost("create")]
        public IActionResult Create([FromBody] StoreKeeperBindingModel model)
        {
            try
            {
                var result = _storage.Insert(model);
                return Ok(result);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        [HttpPut("update")]
        public IActionResult Update([FromBody] StoreKeeperBindingModel model)
        {
            try
            {
                var result = _storage.Update(model);
                return Ok(result);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        [HttpPost("delete")]
        public IActionResult Delete([FromBody] StoreKeeperBindingModel model)
        {
            try
            {
                var result = _storage.Delete(model);
                return Ok(result);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }

        }
    }
}