using MaBibli.Api.Services.Couvertures;

namespace MaBibli.Api.Endpoints;

public static class CouverturesEndpoints
{
    /// <summary>
    /// Relais d'images de couverture, pour la mise en cache hors-ligne.
    /// </summary>
    /// <remarks>
    /// ⚠️ <b>Tout refus répond 404</b>, qu'il s'agisse d'une URL inconnue de la base, d'un schéma
    /// interdit, d'une adresse non routable ou d'un hôte injoignable. Distinguer ces cas ferait du
    /// point d'entrée un oracle : on y lirait quelles URL l'application connaît, et quelles
    /// adresses répondent depuis le serveur. Voir <see cref="ServiceCouvertures"/>.
    /// </remarks>
    public static IEndpointRouteBuilder MapCouverturesEndpoints(this IEndpointRouteBuilder routes)
    {
        routes.MapGet("/api/couvertures", async (
                string? url,
                IServiceCouvertures service,
                CancellationToken ct) =>
            {
                var resultat = await service.ObtenirAsync(url, ct);

                return resultat.Trouvee
                    ? Results.File(resultat.Octets!, resultat.TypeContenu!)
                    : Results.NotFound();
            })
            .WithName("RelayerCouverture")
            .WithTags("Couvertures")
            .WithSummary("Relaie une couverture déjà enregistrée, en même origine.")
            // ⚠️ Pas de `contentType` ici : il varie avec l'image (image/jpeg, image/png…), et
            // l'annotation OpenAPI REFUSE les jokers — « image/* » fait échouer le démarrage du
            // serveur, pas la compilation. Constaté en exécution.
            .Produces(StatusCodes.Status200OK)
            .Produces(StatusCodes.Status404NotFound);

        return routes;
    }
}
