# app/services/user_event_service.py

from typing import Dict, Any, Tuple
from app.extensions.db import db
from app.models import UserEvents, Users # Импортируем модель Users для получения telegram_id


def log_user_action(chat_id: int, action: str) -> Tuple[Dict[str, str], int]:
    try:
        # Получаем telegram_id пользователя по chat_id
        user = Users.query.filter_by(chat_id=chat_id).first()
        if not user:
            return {'error': f'Пользователь с chat_id {chat_id} не найден для логирования действия.'}, 404

        new_event = UserEvents(
            chat_id=chat_id,
            telegram_id=user.telegram_id, # Добавляем telegram_id из найденного пользователя
            action=action,
            # timestamp генерируется автоматически по default=db.func.current_timestamp()
        )
        db.session.add(new_event)
        db.session.commit()
        return {'message': 'Действие сохранено'}, 200
    except Exception as e:
        db.session.rollback()
        return {'error': str(e)}, 500

def get_user_events(chat_id: int) -> tuple[list[dict[str, Any | None]], int]:
    # Предполагаем, что у UserEvents есть поля 'id' и 'timestamp'
    events = UserEvents.query.filter_by(chat_id=chat_id).order_by(UserEvents.timestamp.desc()).all()
    events_list = [{
        'event_id': e.id,
        'chat_id': e.chat_id,
        'event_type': e.action, # Используем 'action', как в модели UserEvents
        'timestamp': e.timestamp.isoformat() if e.timestamp else None # Форматируем дату
    } for e in events]
    return events_list, 200