using WF_WebAdmin.Converter;
using WF_WebAdmin.Model;
using Npgsql;

namespace WF_WebAdmin.Service
{
    public class QuoteServiceLocal: IQuoteService
    {
        private readonly string? _connectionString = "Host=localhost;Port=5432;Username=loguichard3;Password=Reglisse15.;Database=dbloguichard3";




        public async Task<QuoteDTO> AddQuoteAsync(Quote quote)
        {
            QuoteExtension extension = new QuoteExtension();
            QuoteDTO quoteDTO = extension.QuoteToDTO(quote);

            // Utilisation de NpgsqlConnection pour PostgreSQL
            using (var connection = new NpgsqlConnection(_connectionString))
            {
                // Définir la requête SQL d'insertion
                var commandText = "INSERT INTO Quote (content, langue, reason, id_source, id_caracter, id_user_verif, img_path) " +
                                  "VALUES (@content, @langue, @reason, @source, @character, @user, @img_path)";

                // Créer une commande Npgsql
                var command = new NpgsqlCommand(commandText, connection);


                /*
                // Ajouter des paramètres à la commande
                command.Parameters.AddWithValue("@content", quote.Content);
                command.Parameters.AddWithValue("@langue", quote.Langue);
                command.Parameters.AddWithValue("@reason", "À vérifier"); // Vous pouvez changer ça si nécessaire
                command.Parameters.AddWithValue("@source", quote.Source);
                command.Parameters.AddWithValue("@character", quote.Character);
                command.Parameters.AddWithValue("@user", quote.User); // Assurez-vous que `quote.User` est correctement défini
                command.Parameters.AddWithValue("@img_path", quote.ImgPath);
                */


                try
                {
                    // Ouvrir la connexion à la base de données
                    await connection.OpenAsync();

                    // Exécuter la commande d'insertion
                    await command.ExecuteNonQueryAsync();
                }
                catch (Exception ex)
                {
                    // Gérer les erreurs ici (par exemple, afficher ou enregistrer les erreurs)
                    Console.WriteLine($"Une erreur est survenue lors de l'ajout de la citation : {ex.Message}");
                }
                finally
                {
                    // Fermer la connexion (automatiquement géré avec `using`, mais ajouté pour explicitement montrer le processus)
                    await connection.CloseAsync();
                }
            }

            // Retourner l'objet DTO pour que vous puissiez l'utiliser ailleurs dans votre application
            return quoteDTO;
        }


    public Task RemoveQuote(Quote quote)
        {
            QuoteExtension extension = new QuoteExtension();
            QuoteDTO quoteDTO = extension.QuoteToDTO(quote);

            return Task.FromResult(quoteDTO);
        }

        public Task validQuote(Quote quote)
        {
            QuoteExtension extension = new QuoteExtension();
            QuoteDTO quoteDTO = extension.QuoteToDTO(quote);

            return Task.FromResult(quoteDTO);
        }

        public Task updateQuote(Quote quote)
        {
            QuoteExtension extension = new QuoteExtension();
            QuoteDTO quoteDTO = extension.QuoteToDTO(quote);

            return Task.FromResult(quoteDTO);
        }






        public Task addQuote(Quote quote)
        {
            throw new NotImplementedException();
        }

        public Task removeQuote(Quote quote)
        {
            throw new NotImplementedException();
        }

        public Task<List<Quote>> getAllQuote()
        {
            throw new NotImplementedException();
        }

        public Task<List<Quote>> getSomeQuote(int nb, int page)
        {
            throw new NotImplementedException();
        }

        public Task<List<Quote>> getOnequote(int id)
        {
            throw new NotImplementedException();
        }

        public Task<List<Quote>> reserchQuote(string reserch, List<string> argument)
        {
            throw new NotImplementedException();
        }

        public Task<List<Quote>> getAllQuoteInvalid()
        {
            throw new NotImplementedException();
        }

        public Task<List<Quote>> getSomeQuoteInvalid(int nb, int page)
        {
            throw new NotImplementedException();
        }
    }
}
