using MongoDB.Bson;
using MongoDB.Driver;
using MongoMigrations.Core;

namespace adas_core.Infrastructure.Migrations.MongoMigrations;

/// <summary>
/// Represents a database migration that updates the LanguageBarrier component to version 0.1.3.
/// </summary>
public class U_0_1_3_UpdateLanguageBarrier : Migration
{
    public U_0_1_3_UpdateLanguageBarrier() : base(13)
    {
        Description =
            "Borra los elementos de configuracion de poc, relay, camera y beacon y deja el place holder del nuevo modelo";
    }

    public override void Update()
    {
        string[] collectionsToUpdate = { "patients", "admissions" };

        foreach (var collectionName in collectionsToUpdate)
        {
            var collection = Database.GetCollection<BsonDocument>(collectionName);

            // Filtramos documentos donde languageBarrier existe y NO es ya un array
            var filter = Builders<BsonDocument>.Filter.And(
                Builders<BsonDocument>.Filter.Exists("languageBarrier"),
                Builders<BsonDocument>.Filter.Not(Builders<BsonDocument>.Filter.Type("languageBarrier", BsonType.Array))
            );

            var documents = collection.Find(filter).ToList();

            foreach (var doc in documents)
            {
                var currentValue = doc["languageBarrier"];
                BsonArray newArray = new BsonArray();

                // Si el valor actual no es nulo, lo añadimos como primer elemento del array
                if (!currentValue.IsBsonNull)
                {
                    newArray.Add(currentValue);
                }

                // Actualizamos el campo en el documento Bson
                doc["languageBarrier"] = newArray;

                // Guardamos los cambios en la base de datos
                collection.ReplaceOne(Builders<BsonDocument>.Filter.Eq("_id", doc["_id"]), doc);
            }
        }
    }
}