from django.core.management.base import BaseCommand
from django.utils import timezone
from ...models import TallySyncLog
from ...views import trigger_tally_sync_for_order


class Command(BaseCommand):
    help = 'Retry failed tally sync logs for orders'

    def handle(self, *args, **options):
        failed_logs = TallySyncLog.objects.filter(
            sync_type='order',
            status='failed',
            order__isnull=False,
            is_deleted=False
        ).select_related('order')

        retried_count = 0

        for log in failed_logs:
            try:
                new_log = trigger_tally_sync_for_order(log.order)
                log.retry_count += 1
                log.status = 'retrying'
                log.save(update_fields=['retry_count', 'status'])
                retried_count += 1

                self.stdout.write(
                    self.style.SUCCESS(
                        f"Retried order {log.order.order_number}, new log id {new_log.id}"
                    )
                )
            except Exception as e:
                self.stdout.write(
                    self.style.ERROR(
                        f"Retry failed for log {log.id}: {str(e)}"
                    )
                )

        self.stdout.write(
            self.style.WARNING(f"Total retried: {retried_count}")
        )