# standard imports
import logging
import os
import pytest
import shutil
import tempfile

# external imports
from celery import uuid


logg = logging.getLogger()


@pytest.fixture(scope='session')
def celery_includes():
    return [
        'cic_ussd.tasks.callback_handler',
        'cic_ussd.tasks.metadata',
        'cic_ussd.tasks.notifications',
        'cic_ussd.tasks.processor',
        'cic_ussd.tasks.ussd_session',
        'cic_eth.queue.balance',
        'cic_notify.tasks.sms',
    ]


@pytest.fixture(scope='session')
def celery_config():
    bq = tempfile.mkdtemp()
    bp = tempfile.mkdtemp()
    rq = tempfile.mkdtemp()
    logg.debug('celery broker queue {} processed {}'.format(bq, bp))
    logg.debug('celery backend store {}'.format(rq))
    yield {
        'broker_url': 'filesystem://',
        'broker_transport_options': {
            'data_folder_in': bq,
            'data_folder_out': bq,
            'data_folder_processed': bp,
        },
        'result_backend': 'file://{}'.format(rq),
    }
    logg.debug('cleaning up celery filesystem backend files {} {} {}'.format(bq, bp, rq))
    shutil.rmtree(bq)
    shutil.rmtree(bp)
    shutil.rmtree(rq)


@pytest.fixture(scope='session')
def celery_enable_logging():
    return True


@pytest.fixture(scope='function')
def task_uuid():
    return uuid()