using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Net.Http.Headers;
namespace Masuit.Tools.AspNetCore.ResumeFileResults.ResumeFileResult;
/// 
/// 基于Stream的ResumeFileStreamResult
/// 
public class ResumeFileStreamResult : FileStreamResult, IResumeFileResult
{
    /// 
    /// 构造函数
    /// 
    /// 文件流
    /// Content-Type
    /// ETag
    public ResumeFileStreamResult(Stream stream, string contentType, string etag = null) : this(stream, MediaTypeHeaderValue.Parse(contentType), !string.IsNullOrEmpty(etag) ? EntityTagHeaderValue.Parse(etag) : null)
    {
    }
    /// 
    /// 构造函数
    /// 
    /// 文件流
    /// Content-Type
    /// ETag
    public ResumeFileStreamResult(Stream stream, MediaTypeHeaderValue contentType, EntityTagHeaderValue etag = null) : base(stream, contentType)
    {
        if (stream.CanSeek)
        {
            stream.Seek(0, SeekOrigin.Begin);
        }
        EntityTag = etag;
        EnableRangeProcessing = true;
    }
    /// 
    public string FileInlineName { get; set; }
    /// 
    public override Task ExecuteResultAsync(ActionContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }
        var executor = context.HttpContext.RequestServices.GetRequiredService>();
        return executor.ExecuteAsync(context, this);
    }
}