using Microsoft.AspNetCore.Mvc;
using Webzine.Entity.Fixtures;

namespace Webzine.WebApplication.Controllers
{
    public class ArtisteController : Controller
    {
        // Injection du logger via le constructeur
        private readonly ILogger<ArtisteController> _logger;

        /// <summary>
        /// Initialise une nouvelle instance du <see cref="ArtisteController"/> avec un service de journalisation injecté.
        /// </summary>
        /// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
        public ArtisteController(ILogger<ArtisteController> logger)
        {
            this._logger = logger;
            this._logger.LogDebug(1, "initialisation du ArtisteController");
        }

        /// <summary>
        /// Prend en paramètre le nom de l'artiste (ex: "fatal-bazooka"), utilise la factory pour trouver l'artiste correspondant, et affiche sa page dédiée.
        /// </summary>
        /// <param name="nom">Le nom de l'artiste à rechercher, formaté en kebab-case (ex: "fatal-bazooka").</param>
        /// <returns>La vue de l'artiste avec son ViewModel, ou une redirection vers l'accueil si le nom est vide, ou une erreur 404 si l'artiste n'est pas trouvé.</returns>
        [HttpGet("/artiste/{nom}")]
        public IActionResult Index(string nom)
        {
            this._logger.LogInformation("Tentative d'accès à l'artiste avec le nom : {NomArtiste}", nom);

            if (string.IsNullOrEmpty(nom))
            {
                this._logger.LogWarning("Nom de l'artiste manquant dans la requête.");
                return RedirectToAction("Index", "Accueil");
            }

            // On transforme "fatal-bazooka" en "Fatal Bazooka" pour la factory
            string nomPropre = System.Globalization.CultureInfo.CurrentCulture.TextInfo
                .ToTitleCase(nom.Replace("-", " "));

            // On appelle la factory pour obtenir l'artiste unique
            var artiste = ArtisteFactory.SeedArtisteByName(nomPropre);

            if (artiste == null)
            {
                this._logger.LogWarning("Artiste non trouvé pour le nom : {NomArtiste}", nomPropre);
                return RedirectToAction("Index");
            }

            this._logger.LogInformation("Artiste trouvé : {NomArtiste}", nom);

            return View(artiste);
        }
    }
}
