using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using System.Linq;
using System.Threading.Tasks;

using FamilyTreeAPI.Interface;
using FamilyTreeAPI.Entities;

namespace FamilyTreeAPI.Authorization;

public class JwtMiddleware
{
    private readonly RequestDelegate _next;
    private readonly AppSettings _appSettings;

    public JwtMiddleware(RequestDelegate next, IOptions<AppSettings> appSettings)
    {
        _next = next;
        _appSettings = appSettings.Value;
    }

    public async Task Invoke(HttpContext context, IJwtUtils jwtUtils)
    {
        var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
        if (token != null)
        {
            var user = jwtUtils.ValidateJwtToken(token);
            if (user != null)
            {
                // attach user to context on successful jwt validation
                //here to put in the real user 
                //TODO if you want to add information for User
                context.Items["User"] = user;
            }
        }
        await _next(context);
    }
}
