# ! No utilizado

# Datos en Array dentro de un Documento Mongo
def MongoScapp_AddDataOnArray(mongo_collection, filtro, array_name, data):
    # Función auxiliar para agregar un dato "data" dentro de un array, en el documento filtrado mediante "filtro" en la colección de datos Mongo "mongo_collection"
    # Verificar si el documento existe
    documento = mongo_collection.find_one( filtro )
    
    # Si el documento existe, agregar el dato al array
    if documento:
        # Verificar si el array existe en el documento
        if array_name in documento:
            mongo_collection.update_one( filtro, { '$push': {array_name: data} } )
        else:
            mongo_collection.update_one(filtro, {'$set': {array_name: [data]}})
    else:
        # Si el documento no existe, crearlo con el dato a agregar
        nuevo_documento = { array_name: [data] }
        nuevo_documento.update( filtro ) # Añade filtro al diccionario nuevo_documento
        mongo_collection.insert_one( nuevo_documento )
        
def MongoScapp_ModifyDataOnArray(mongo_collection, filter, array_name, array_filter, new_array_data):
    # Función auxiliar para modificar un dato "new_array_data" dentro de un array, filtrando el array con "array_filter", 
    # en el documento filtrado mediante "filtro" en la colección de datos Mongo "mongo_collection"
    
    # Verificar si el documento existe
    documento = mongo_collection.find_one(filter)
    
    # Si el documento existe, modificar el array
    if documento:
        # Verificar si el array existe en el documento
        if array_name in documento:
            mongo_collection.update_one(filter, {"$set": {f"{array_name}.$[elem]": new_array_data}}, array_filters=[{"elem.hora": array_filter["hora"]}])
        else:
            MongoScapp_AddDataOnArray(mongo_collection, filter, array_name, new_array_data)
    else:
        # Si el documento no existe, crearlo con el array a modificar
        MongoScapp_AddDataOnArray(mongo_collection, filter, array_name, new_array_data)
        
# Datos directamente en Documento Mongo
def MongoScapp_AddDataOnDocument(mongo_collection, filter, data_name, data):
    # Función auxiliar para agregar dato "data" directamente en el documento filtrado mediante "filtro" en la colección de datos Mongo "mongo_collection"
    # Crear una conexión con la base de datos
    
    # Buscar un documento que cumpla con el filtro especificado
    document = mongo_collection.find_one(filter)
    
    # Si el documento existe, añadir el dato al array existente o crearlo si no existe
    if document is not None:
        mongo_collection.update_one(filter, {"$addToSet": {data_name: data}})
    else:
        document = {data_name: [data]}
        document.update(filter)
        mongo_collection.insert_one(document)
        
def MongoScapp_ModifyDataOnDocument(mongo_collection, filter, data_name, new_data):
    # Buscar un documento que cumpla con el filtro especificado
    document = mongo_collection.find_one(filter)
    
    # Si el documento existe, modificar el valor del campo data_name con new_data
    if document is not None:
        mongo_collection.update_one(filter, {"$set": {data_name: new_data}})
    # Si el documento no existe, crear uno nuevo con el filtro y los datos especificados
    else:
        MongoScapp_AddDataOnDocument(mongo_collection, filter, data_name, new_data)
        


        
# Ejemplos de uso:
""" 1. Añadir dato en documento
# Crear el documento:
{
  "Configuraciones": "Configmenu",
  "Alarmas": {
    "Color": "alarm-anim_tipoRosa 1.2s linear infinite",
    "PelletThreshold": "2"
  }
}

Usamos la función MongoScapp_AddDataOnDocument()
    filter = {"Configuraciones": "Configmenu"}
    data_name = "Alarmas"
    data = {"Color": "alarm-anim_tipoRosa 1.2s linear infinite", "PelletThreshold": "2"} 

Scapp_AddMongoData(mongo_collection, filter, data_name, data)
# """

""" 2. Editar dato en documento
# Modificar el documento:
{
  "Configuraciones": "Configmenu",
  "Alarmas": {
    "Color": "alarm-anim_tipoRosa 1.2s linear infinite",
    "PelletThreshold": "2"
  }
}
a: 
{
  "Configuraciones": "Configmenu",
  "Alarmas": {
    "Color": "Azul",
    "PelletThreshold": "5"
  }
}

Usamos la función MongoScapp_ModifyDataOnDocument()
    filter = {"Configuraciones": "Configmenu"}
    data_name = "Alarmas"
    new_data = {"Color": "Azul", "PelletThreshold": "5"}

MongoScapp_ModifyDataOnDocument(mongo_collection, filter, data_name, new_data)
# """

""" 3. Añadir dato en array
se quiere añadir otro dato al array:
"Multi_1-A": [
    {
      "hora": "05/05/23 15:55:00",
      "pellet": 0,
      "detecciones": 0
    },
    ...
    ]
en el documento:
{
    "dia": "05/05/23",
    "Multi_1-A": [ ... ]
}

Usamos la función MongoScapp_AddDataOnArray() : 
    filtro = {"dia": "05/05/23"}
    array_name = "Multi_1-A"
    data = {
        "hora": "05/05/23 15:55:00",
        "pellet": 10,
        "detecciones": 10
    }
MongoScapp_ModifyDataOnDocument(mongo_collection, filter, data_name, new_data)
# """

""" 4. Editar dato en array
Modificar el array:
"Multi_1-A" = [
        {
        "hora": "05/05/23 15:55:00" , 
        ...} 
        , ...
    ]
en el documento:
{
    "dia": "05/05/23",
    "Multi_1-A": [ ... ]
}

Usamos la función MongoScapp_ModifyDataOnArray() : 

    filter = {"dia": "05/05/23"}
    array_name = "Multi_1-A"
    array_filter = {"hora": "05/05/23 15:55:00"}
    new_array_data = {"pellet": 10, "detecciones": 10}

MongoScapp_ModifyDataOnArray(db.collection, filter, array_name, array_filter, new_array_data)
# """

