# calls/management/commands/setup_celery_tasks.py
from django.core.management.base import BaseCommand
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json


class Command(BaseCommand):
    help = 'Setup Celery Beat periodic tasks for call monitoring'
    
    def handle(self, *args, **kwargs):
        # Create interval schedules
        every_10_seconds, created = IntervalSchedule.objects.get_or_create(
            every=10,
            period=IntervalSchedule.SECONDS,
        )
        if created:
            self.stdout.write(self.style.SUCCESS('Created 10-second interval'))
        
        every_30_seconds, created = IntervalSchedule.objects.get_or_create(
            every=30,
            period=IntervalSchedule.SECONDS,
        )
        if created:
            self.stdout.write(self.style.SUCCESS('Created 30-second interval'))
        
        # Task 1: Monitor live calls (every 10 seconds)
        task1, created = PeriodicTask.objects.update_or_create(
            name='monitor-live-calls-duration',
            defaults={
                'task': 'calls.tasks.monitor_live_calls_duration',
                'interval': every_10_seconds,
                'enabled': True,
                'description': 'Monitors live call durations and sends warnings when time is low',
                'one_off': False,
            }
        )
        
        if created:
            self.stdout.write(self.style.SUCCESS('Created: monitor-live-calls-duration'))
        else:
            self.stdout.write(self.style.SUCCESS('Updated: monitor-live-calls-duration'))
        
        # Task 2: Update call statuses (every 10 seconds)
        task2, created = PeriodicTask.objects.update_or_create(
            name='update-call-statuses',
            defaults={
                'task': 'calls.tasks.check_and_update_call_statuses',
                'interval': every_10_seconds,
                'enabled': True,
                'description': 'Checks Vapi.ai for call status updates',
                'one_off': False,
            }
        )
        
        if created:
            self.stdout.write(self.style.SUCCESS('Created: update-call-statuses'))
        else:
            self.stdout.write(self.style.SUCCESS('Updated: update-call-statuses'))
        
        # Display all active tasks
        self.stdout.write('\n' + '='*50)
        self.stdout.write('Active Periodic Tasks:')
        self.stdout.write('='*50)
        
        for task in PeriodicTask.objects.filter(enabled=True):
            self.stdout.write(f'• {task.name}')
            self.stdout.write(f'  Task: {task.task}')
            self.stdout.write(f'  Schedule: Every {task.interval.every} {task.interval.period}')
            self.stdout.write(f'  Last run: {task.last_run_at}')
            self.stdout.write(f'  Total runs: {task.total_run_count}')
            self.stdout.write()
