from celery_once import QueueOnce

from aggregator.client import get_client
from config.celery import app

from .client import collect_new_messages as _collect_new_messages


@app.task(base=QueueOnce, once={'keys': ['chat_id'], 'graceful': True})
def collect_new_messages(chat_id):
    from .models import Chat

    chat = Chat.objects.get(pk=chat_id)
    client = get_client(takeout=True)
    client.start()
    _collect_new_messages(client, chat)
    client.stop()
