import json
from pymongo import MongoClient

def exportar_base_de_datos_a_json(database_name, output_file):
    # Conéctate a la base de datos MongoDB
    client = MongoClient('localhost', 27017)  # Cambia la conexión según tus configuraciones
    db = client[database_name]

    # Obtiene una lista de todas las colecciones en la base de datos
    collections = db.list_collection_names()

    # Inicializa un diccionario para almacenar los datos exportados
    export_data = {}

    # Itera sobre todas las colecciones y guarda los documentos en el diccionario
    for collection_name in collections:
        collection = db[collection_name]
        documents = list(collection.find())
        export_data[collection_name] = documents

    # Guarda los datos exportados en un archivo JSON
    with open(output_file, 'w') as file:
        json.dump(export_data, file, default=str)  # El parámetro default permite manejar objetos no serializables

    print(f'La base de datos "{database_name}" ha sido exportada a "{output_file}".')

def exportar_base_de_datos_a_json_por_fecha(database_name, output_file, fecha_inicial, fecha_final):
    # Conéctate a la base de datos MongoDB
    client = MongoClient('localhost', 27017)  # Cambia la conexión según tus configuraciones
    db = client[database_name]

    # Obtiene una lista de todas las colecciones en la base de datos
    collections = db.list_collection_names()

    # Inicializa un diccionario para almacenar los datos exportados
    export_data = {}
    
    # Crear el filtro usando $gte y $lte para buscar documentos dentro del rango de fechas
    filtro = {
        "fecha": {
            "$gte": fecha_inicial,
            "$lte": fecha_final
        }
    }

    # Itera sobre todas las colecciones y guarda los documentos en el diccionario
    for collection_name in collections:
        if collection_name == "data":
            collection = db[collection_name]
            documents = list(collection.find(filtro))
            export_data[collection_name] = documents
        else:
            collection = db[collection_name]
            documents = list(collection.find())
            export_data[collection_name] = documents

    # Guarda los datos exportados en un archivo JSON
    with open(output_file, 'w') as file:
        json.dump(export_data, file, default=str)  # El parámetro default permite manejar objetos no serializables

    print(f'La base de datos "{database_name}" ha sido exportada a "{output_file} entre las fechas {fecha_inicial} y {fecha_final}".')




def importar_a_mongodb(database_name, input_file):
    # Conéctate a la base de datos MongoDB
    client = MongoClient('localhost', 27017)  # Cambia la conexión según tus configuraciones
    db = client[database_name]

    # Lee los datos desde el archivo JSON
    with open(input_file, 'r') as file:
        data = json.load(file)

    # Itera sobre las colecciones en el diccionario de datos y agrega los documentos a MongoDB
    for collection_name, documents in data.items():
        collection = db[collection_name]
        collection.insert_many(documents)

    print(f'Datos desde "{input_file}" importados a la base de datos "{database_name}".')


def borrar_coleccion(database_name):
    # Conéctate a la base de datos MongoDB
    client = MongoClient('localhost', 27017)
    db = client[database_name]
    # Borrar DB NANOOX
    if database_name == "NANOOX":
        coleccion_datos = db.sensores
        coleccion_metadata = db.metadata
        coleccion_datos.drop()
        coleccion_metadata.drop()
        print(f'De la DB "{database_name}" la colección "{coleccion_datos}" y "{coleccion_metadata}" han sido eliminadas')
    # Borrar DB ENVIRO
    elif database_name == "ENVIRO":
        coleccion_datos = db.data
        coleccion_metadata = db.metadata
        coleccion_datos.drop()
        coleccion_metadata.drop()
        print(f'De la DB "{database_name}" la colección "{coleccion_datos}" y "{coleccion_metadata}" han sido eliminadas')
    elif database_name== "users":
        try:
            db['users'].drop()
            db['ciclos'].drop()
            print("se borró la coleccion users y ciclos")
        except:
            print("NO se borró la db users")
    

# importar_a_mongodb('ENVIRO', 'ENVIRO.json')
# importar_a_mongodb('NANOOX', 'NANOOX.json')
# importar_a_mongodb('users', 'users.json')


#! uso de exportar db

exportar_base_de_datos_a_json('users', 'users_desa.json')
#importar_a_mongodb('NANOOX', 'NANOOX.json')
# importar_a_mongodb('users', 'users_ac.json')



#! uso de importar db
#importar_a_mongodb('TEST_AMBIENTAL', 'SERVIDOR_AMBIENTAL.json')
#importar_a_mongodb('NANOOX', 'nanooxDB.json')
# importar_a_mongodb('db_test_reportes', 'no_null_DB2.json')

# borrar_coleccion("users")


#dbs = ['ENVIRO' , 'NANOOX',  'users']



#for db in dbs:
#    exportar_base_de_datos_a_json_por_fecha(db, f"{db}.json", "2024-03-09", "2024-04-09")
    #exportar_base_de_datos_a_json(db, f"{db}.json")