using System;
using System.Threading.Tasks;
using Jellyfin.Api.Constants;
using Jellyfin.Data.Queries;
using MediaBrowser.Common.Api;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.Querying;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Jellyfin.Api.Controllers;
/// 
/// Activity log controller.
/// 
[Route("System/ActivityLog")]
[Authorize(Policy = Policies.RequiresElevation)]
public class ActivityLogController : BaseJellyfinApiController
{
    private readonly IActivityManager _activityManager;
    /// 
    /// Initializes a new instance of the  class.
    /// 
    /// Instance of  interface.
    public ActivityLogController(IActivityManager activityManager)
    {
        _activityManager = activityManager;
    }
    /// 
    /// Gets activity log entries.
    /// 
    /// Optional. The record index to start at. All items with a lower index will be dropped from the results.
    /// Optional. The maximum number of records to return.
    /// Optional. The minimum date. Format = ISO.
    /// Optional. Filter log entries if it has user id, or not.
    /// Activity log returned.
    /// A  containing the log entries.
    [HttpGet("Entries")]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public async Task>> GetLogEntries(
        [FromQuery] int? startIndex,
        [FromQuery] int? limit,
        [FromQuery] DateTime? minDate,
        [FromQuery] bool? hasUserId)
    {
        return await _activityManager.GetPagedResultAsync(new ActivityLogQuery
        {
            Skip = startIndex,
            Limit = limit,
            MinDate = minDate,
            HasUserId = hasUserId
        }).ConfigureAwait(false);
    }
}