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 CategoryItemController : ControllerBase {
    private readonly ILogger _logger;
    private readonly ICategoryItemService _categoryItemService;
    /// 
    /// 
    /// 
    /// 
    /// 
    public CategoryItemController(
      ILogger logger,
      ICategoryItemService categoryItemService) {
      _logger = logger;
      _categoryItemService = categoryItemService;
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpPost("{siteId}")]
    public IActionResult Post([FromRoute] Guid siteId, [FromBody] CategoryItemRequestModel requestData) {
      var result = _categoryItemService.Post(siteId, requestData);
      return result.ToActionResult();
    }
    /// 
    /// Returns full object
    /// 
    /// 
    /// 
    /// 
    [HttpGet("{siteId}/{categoryId}")]
    public IActionResult Get([FromRoute] Guid siteId, [FromRoute] Guid categoryId) {
      var result = _categoryItemService.Get(siteId, categoryId);
      return result.ToActionResult();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpGet("{siteId}")]
    public IActionResult GetSlug([FromRoute] Guid siteId, [FromQuery] string slug) {
      var result = _categoryItemService.GetSlug(siteId, slug);
      return result.ToActionResult();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpPut("{siteId}/{categoryId}")]
    public IActionResult Update([FromRoute] Guid siteId, [FromRoute] Guid categoryId, [FromBody] CategoryItemRequestModel requestData) {
      var result = _categoryItemService.Update(siteId, categoryId, requestData);
      return result.ToActionResult();
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    [HttpDelete("{siteId}/{categoryId}")]
    public IActionResult Delete([FromRoute] Guid siteId, [FromRoute] Guid categoryId) {
      var result = _categoryItemService.Delete(siteId, categoryId);
      return result.ToActionResult();
    }
  }
}