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