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

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

        public OrderController(ILogger<OrderController> logger, IOrderStorage storage)
        {
            _logger = logger;
            _storage = storage;
        }

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