# src/models/sensor.py
"""
Módulo de modelo de sensor.

Define la estructura y comportamiento de los sensores del sistema,
incluyendo:
- Propiedades y estado del sensor
- Validación de datos
- Cálculo de estadísticas
- Estado de comunicación

Este módulo complementa al modelo Entrada proporcionando funcionalidad
específica para los sensores físicos.
"""

from datetime import datetime
import logging
from ..config.settings import TEMP_MIN, TEMP_MAX

logger = logging.getLogger(__name__)

class Sensor:
    """
    Representa un sensor físico en el sistema.
    
    Gestiona la información y estado de un sensor individual,
    incluyendo su configuración y datos de comunicación.
    
    Attributes:
        id_modbus (int): ID único del dispositivo Modbus
        dmac (str): Dirección MAC del dispositivo
        estado (int): Estado actual del sensor
        ultima_lectura (datetime): Timestamp de última lectura
        config (dict): Configuración específica del sensor
    """
    
    ESTADOS = {
        0: 'Desconectado',
        1: 'Activo',
        2: 'Error',
        3: 'Mantenimiento'
    }
    
    def __init__(self, id_modbus, dmac, config=None):
        self.id_modbus = id_modbus
        self.dmac = dmac
        self.estado = 1  # Activo por defecto
        self.ultima_lectura = None
        self.config = config or {}
        self.error_count = 0
        
    def validar_lectura(self, valor, timestamp):
        """
        Valida una lectura del sensor.
        
        Args:
            valor (float): Valor de temperatura leído
            timestamp (datetime): Momento de la lectura
            
        Returns:
            tuple: (es_valido, mensaje_error)
        """
        if not TEMP_MIN <= valor <= TEMP_MAX:
            return False, f"Temperatura fuera de rango: {valor}°C"
            
        if timestamp > datetime.now():
            return False, f"Timestamp futuro: {timestamp}"
            
        return True, None