using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using DomainResults.Mvc;
using WeatherForecast.Services;
using WeatherForecast.Models.Requests;
namespace WeatherForecast.Controllers {
  /// 
  /// 
  /// 
  [AllowAnonymous]
  [ApiController]
  [Route("api/[controller]")]
  public class ShopItemController : ControllerBase {
    private readonly ILogger _logger;
    private readonly IShopItemService _shopItemService;
    /// 
    /// 
    /// 
    /// 
    /// 
    public ShopItemController(
      ILogger logger,
      IShopItemService shopItemService
    ) {
      _logger = logger;
      _shopItemService = shopItemService;
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpPost("{siteId}/{sku}")]
    public IActionResult Post([FromRoute] Guid siteId, [FromRoute] string sku, [FromBody] ShopItemRequestModel requestData) {
      var result = _shopItemService.Post(siteId, sku, requestData);
      return result.ToActionResult();
    }
    /// 
    /// Returns full object
    /// 
    /// 
    /// 
    /// 
    [HttpGet("{siteId}/{sku}")]
    public IActionResult Get([FromRoute] Guid siteId, [FromRoute] string sku) {
      var result = _shopItemService.Get(siteId, sku);
      return result.ToActionResult();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpGet("{siteId}")]
    public IActionResult GetSlug([FromRoute] Guid siteId, [FromQuery] string slug) {
      var result = _shopItemService.GetSlug(siteId, slug);
      return result.ToActionResult();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpPut("{siteId}/{sku}")]
    public IActionResult Update([FromRoute] Guid siteId, [FromRoute] string sku, [FromBody] ShopItemRequestModel requestData) {
      var result = _shopItemService.Update(siteId, sku, requestData);
      return result.ToActionResult();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpDelete("{siteId}/{sku}")]
    public IActionResult Delete([FromRoute] Guid siteId, [FromRoute] string sku) {
      var result = _shopItemService.Delete(siteId, sku);
      return result.ToActionResult();
    }
  }
}