from django.core.management.base import BaseCommand
from bs4 import BeautifulSoup
from extractly.models import NetworkMonitoredPage


def extract_dynamic_css_classes(html: str, selector: str, prefix: str = "css-") -> list:
    soup = BeautifulSoup(html or "", "html.parser")
    el = soup.select_one(selector)
    if not el:
        return []
    class_list = el.get("class", [])
    return [cls for cls in class_list if cls.startswith(prefix)]


class Command(BaseCommand):
    help = "Wyciąga klasy CSS typu .css-xxxx z pola html w NetworkMonitoredPage na podstawie selektora data-*."

    def add_arguments(self, parser):
        parser.add_argument('--id', type=int, help="ID rekordu do przetworzenia (NetworkMonitoredPage)")
        parser.add_argument('--selector', type=str, required=True, help='CSS selector np. div[data-sentry-component="AdHistoryBase"]')

    def handle(self, *args, **options):
        record_id = options.get("id")
        selector = options.get("selector")

        if not record_id:
            self.stdout.write(self.style.ERROR("--id jest wymagany"))
            return

        try:
            page = NetworkMonitoredPage.objects.get(id=record_id)
        except NetworkMonitoredPage.DoesNotExist:
            self.stdout.write(self.style.ERROR(f"Nie znaleziono rekordu z ID={record_id}"))
            return

        html = page.html
        if not html:
            self.stdout.write(self.style.WARNING("Brak html w rekordzie"))
            return

        classes = extract_dynamic_css_classes(html, selector)
        if classes:
            self.stdout.write(self.style.SUCCESS(f"Znalezione klasy: {classes}"))
        else:
            self.stdout.write("Nie znaleziono klas pasujących do selektora.")
