// <copyright file="NullableEnumModelBinderProvider.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>

namespace Jellyfin.Api.ModelBinders;

using System;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

/// <summary>
/// Nullable enum model binder provider.
/// </summary>
public class NullableEnumModelBinderProvider : IModelBinderProvider
{
    /// <inheritdoc />
    public IModelBinder? GetBinder(ModelBinderProviderContext context)
    {
        var nullableType = Nullable.GetUnderlyingType(context.Metadata.ModelType);
        if (nullableType is null || !nullableType.IsEnum)
        {
            // Type isn't nullable or isn't an enum.
            return null;
        }

        var logger = context.Services.GetRequiredService<ILogger<NullableEnumModelBinder>>();
        return new NullableEnumModelBinder(logger);
    }
}
