##
# @file DataDefinitions.py
#
# @brief Contiene las definiciones de los tipos de datos esperados y valores por defecto, para los documentos de la colección original y la colección transformada. 
# 
# @authors DopamineLabs LTDA
# @date 2025
##


import datetime

OLD_TOP_LEVEL_STRUCTURE = {
    '_id': {'datatype': ['ObjectId'], 'null': False, 'default': None},
    '_cage': {'datatype': [list], 'null': None, 'default': None},
    'dia': {'datatype': [str], 'null': False, 'default': None},
    'Metodo_alimentacion': {'datatype': [str], 'null': True, 'default': 'Saciedad'}
}

OLD_CAGE_STRUCTURE = {
    'hora':{'datatype': [str], 'null': False, 'default': None},
    'perdidos':{'datatype': [int], 'null': False, 'default': None},
    'detecciones':{'datatype': [int], 'null': False, 'default': None },
    'perdidos_propios':{'datatype': [int], 'null': True, 'default': 0},
    'nivel_actividad':{'datatype': [int] , 'null': False, 'default': None},
    'use_feeding_api':{'datatype': [bool], 'null': False, 'default': None},
    'detection_active':{'datatype': [bool], 'null': False, 'default': None},
    'Comida_entregada':{'datatype': [float, int], 'null': True, 'default': 0},
    'Meta_dia':{'datatype': [float, int], 'null': True, 'default': 0},
    'Porc_entregado':{'datatype': [str], 'null': True, 'default': "0"}, #The default type was change to match the datatype definition
    'Tasa':{'datatype': [float, int], 'null': True, 'default': 0 },
    'Unidad_Medida':{'datatype': [str], 'null': True, 'default': 'kg/min'},
    'Dia':{'datatype': [float, int], 'null': True, 'default': 0},
    'Feeding_active':{'datatype':[bool], 'null': True, 'default': False},
    'Visitas':{'datatype': [list], 'null': True, 'default': []},
    'x_pos': {'datatype': [int, str], 'null': True, 'default': '-'},
    'y_pos': {'datatype': [int, str], 'null': True, 'default': '-'},
    'winche_connected': {'datatype': [bool], 'null': True, 'default': False},
    'temp': {'datatype': [str], 'null': True, 'default': '-'}
}

OLD_VISIT_STRUCTURE = {
    'duracion':{'datatype': [float], 'null': False, 'default': None},
    'racion':{'datatype': [float], 'null': False, 'default': None},
    'inicio':{'datatype': [str], 'null': False, 'default': None},
    'final':{'datatype': [str], 'null': False, 'default': None}
}


NEW_TOP_LEVEL_STRUCTURE = {
    '_id': {'datatype': ['ObjectId'], 'null': False, 'default': None},
    'timestamp': {'datatype': [datetime.datetime], 'null': False, 'default': None},
    'metadata':{'datatype': [dict], 'null': False, 'default':None},
    'Detecciones': {'datatype': [dict], 'null': False, 'default': None},
    'Alimentacion': {'datatype': [dict], 'null': False, 'default': None},
    'Visitas': {'datatype': [list], 'null': True, 'default': []},
    'Posicion': {'datatype': [dict], 'null': False, 'default': None},
    'Sensores': {'datatype': [dict], 'null': False, 'default': None},
    'Metodo_alimentacion': {'datatype': [str], 'null': False, 'default': None}
}

NEW_DETECCIONES_STRUCTURE = {
    'perdidos': {'datatype': [int], 'null': False, 'default': None},
    'detectados': {'datatype': [int], 'null': False, 'default': None},
    'perdidos_propios': {'datatype': [int], 'null': False, 'default': None},
    'nivel_actividad': {'datatype': [int, float], 'null': False, 'default': None},
}

NEW_ALIMENTACION_STRUCTURE = {
    'use_feeding_api': {'datatype': [bool], 'null': False, 'default': None},
    'detection_active': {'datatype': [bool], 'null': False, 'default': None},
    'Comida_entregada': {'datatype': [int, float], 'null': False, 'default': None},
    'Meta_dia': {'datatype': [float, int], 'null': False, 'default': None},
    'Porc_entregado': {'datatype': [int], 'null': False, 'default': None},
    'Tasa': {'datatype': [int, float], 'null': False, 'default': None},
    'Dia': {'datatype': [float], 'null': False, 'default': None},
    'Feeding_active': {'datatype': [bool], 'null': False, 'default': None},
    'Unidad_Medida': {'datatype': [str], 'null': False, 'default': None}
}

NEW_VISIT_STRUCTURE = {
    'duracion':{'datatype': [int, float], 'null': False, 'default': None},
    'racion':{'datatype': [int, float], 'null': False, 'default': None},
    'inicio':{'datatype': [datetime.datetime], 'null': False, 'default': None},
    'final':{'datatype': [datetime.datetime], 'null': False, 'default': None}
}

NEW_POSICION_STRUCTURE = {
    'x_pos': {'datatype': [int, str], 'null': False, 'default': None},
    'y_pos': {'datatype': [int, str], 'null': False, 'default': None},
    'winche_connected': {'datatype': [bool], 'null': False, 'default': None}
}

NEW_SENSOR_STRUCTURE = {
    'temp': {'datatype': [str], 'null': False, 'default': None}
}