using MaBibli.Api.Services.Isbn;
using MaBibli.Shared.Dtos;

namespace MaBibli.Api.Endpoints;

public static class IsbnEndpoints
{
    /// <summary>
    /// Expose le lookup ISBN. Aucune écriture en base : cet endpoint pré-remplit un formulaire,
    /// il n'enregistre rien.
    /// </summary>
    public static IEndpointRouteBuilder MapIsbnEndpoints(this IEndpointRouteBuilder routes)
    {
        var groupe = routes.MapGroup("/api/isbn").WithTags("ISBN");

        groupe.MapGet("/{isbn}", async (
                string isbn,
                IIsbnLookupService service,
                CancellationToken ct) =>
            {
                var resultat = await service.RechercherAsync(isbn, ct);

                return resultat is null
                    ? Results.BadRequest(new { erreur = $"« {isbn} » n'est pas un ISBN valide." })
                    : Results.Ok(resultat);
            })
            .WithName("RechercherIsbn")
            .WithSummary("Cherche les notices correspondant à un ISBN (cascade BnF → OpenLibrary).")
            .WithDescription(
                "Renvoie TOUS les candidats trouvés (jusqu'à 5) : un même ISBN peut correspondre à "
                + "plusieurs rééditions. Le choix revient à l'utilisateur.")
            .Produces<ResultatLookupIsbn>()
            .Produces(StatusCodes.Status400BadRequest);

        return routes;
    }
}
