from orchestra.contrib.crons.utils import apply_local

from . import settings


def celery_sync(resource, name):
    from djcelery.models import PeriodicTask
    if resource.pk and resource.crontab:
        try:
            task = PeriodicTask.objects.get(name=name)
        except PeriodicTask.DoesNotExist:
            if resource.is_active:
                PeriodicTask.objects.create(
                    name=name,
                    task='resources.Monitor',
                    args=[resource.pk],
                    crontab=resource.crontab
                )
        else:
            if task.crontab != resource.crontab:
                task.crontab = resource.crontab
                task.save(update_fields=['crontab'])
    else:
        PeriodicTask.objects.filter(
            name=name,
        ).delete()


def cron_sync(resource, name):
    if resource.pk and resource.crontab:
        context = {
            'manager': os.path.join(paths.get_project_dir(), 'manage.py'),
            'id': resource.pk,
        }
        apply_local(resource.crontab,
            'python3 %(manager)s runmethod orchestra.contrib.resources.tasks.monitor %(id)s',
            'orchestra', # TODO
            name
        )
    else:
        apply_local(resource.crontab, '', 'orchestra', name, action='delete')