from django.core.management.base import BaseCommand
from extractly.models import NetworkMonitoredPage
from html_agregator.utils.raw_data import process_single_page
from asgiref.sync import async_to_sync, sync_to_async


class Command(BaseCommand):
    help = "Przetwarza maksymalnie 1000 rekordów z dokładnie dopasowanym raw_data. Jeśli raw_data to pusty szablon – ustawia NULL."

    def handle(self, *args, **options):
        async_to_sync(self.run)()

    async def run(self):
        RAW_JSON_VARIANTS = [
            '{"sliced_gallery_html": "", "sliced_container_html": ""}',
            '{"sliced_gallery_html": "", "sliced_top_data_html": "", "sliced_container_html": ""}'
        ]

        matching = await sync_to_async(list)(
            NetworkMonitoredPage.objects.filter(raw_data__in=RAW_JSON_VARIANTS).exclude(is_active=False)[:1000]
        )

        self.stdout.write(f"🔍 Znaleziono {len(matching)} rekordów z dopasowanym raw_data.")

        for idx, obj in enumerate(matching, start=1):
            self.stdout.write(f"\n🧹 Czyszczę raw_data ID={obj.id} ({idx}/{len(matching)})")

            # 🔄 Zamień na NULL
            obj.raw_data = None
            await sync_to_async(obj.save)()

            # ✅ Teraz przetwarzaj
            self.stdout.write(f"⚙️  Przetwarzam po czyszczeniu ID={obj.id}")
            await process_single_page(obj, idx, len(matching), self.stdout.write)
