"""
Utilidad para rastrear actividad del usuario automáticamente.
"""
from app.db import get_db_connection
from app.utils.logger import get_logger
from datetime import datetime, timezone
import uuid
import json

logger = get_logger(__name__)


def log_user_activity(user_id, activity_type, search_term=None, filters=None, entity_id=None):
    """
    Registra una actividad del usuario en el historial.
    
    Args:
        user_id: ID del usuario
        activity_type: Tipo de actividad ('tire_search', 'business_search', 'tire_view', 'business_view')
        search_term: Término de búsqueda (opcional)
        filters: Diccionario de filtros aplicados (opcional)
        entity_id: ID de la entidad vista (llanta o negocio) (opcional)
    
    Returns:
        bool: True si se registró exitosamente, False en caso contrario
    """
    if not user_id or not activity_type:
        return False
    
    conn = get_db_connection()
    if not conn:
        return False
    
    try:
        cursor = conn.cursor()
        
        # Convertir filtros a JSON string si es un dict
        filters_json = None
        if filters:
            if isinstance(filters, dict):
                filters_json = json.dumps(filters)
            elif isinstance(filters, str):
                filters_json = filters
        
        # Crear entrada de historial
        history_id = f"hist-{user_id}-{uuid.uuid4().hex[:12]}"
        cursor.execute("""
            INSERT INTO historial_busquedas (id, usuario_id, tipo, termino_busqueda, filtros, entidad_id, creado_en)
            VALUES (%s, %s, %s, %s, %s, %s, %s)
        """, (history_id, user_id, activity_type, search_term, filters_json, entity_id, datetime.now(timezone.utc)))
        
        conn.commit()
        cursor.close()
        conn.close()
        return True
    
    except Exception as e:
        if 'cursor' in locals():
            cursor.close()
        if conn:
            conn.rollback()
            conn.close()
        logger.warning(f"Error logging user activity: {str(e)}", extra={
            'user_id': user_id,
            'activity_type': activity_type
        })
        return False
