import json
from django.core.management.base import BaseCommand
from extractly.models import NetworkMonitoredPage

class Command(BaseCommand):
    help = "Show raw_data + url + image_links + parse_data as a single JSON object for a NetworkMonitoredPage record. Optionally save to file (--output)."

    def add_arguments(self, parser):
        parser.add_argument('--id', type=int, help="ID of the NetworkMonitoredPage record")
        parser.add_argument('--url', type=str, help="URL of the NetworkMonitoredPage record (exact match)")
        parser.add_argument('--output', type=str, help="Output filename (JSON)")

    def handle(self, *args, **options):
        record_id = options.get("id")
        url_filter = options.get("url")
        output_file = options.get("output")

        if record_id:
            try:
                page = NetworkMonitoredPage.objects.get(id=record_id)
            except NetworkMonitoredPage.DoesNotExist:
                self.stdout.write(self.style.ERROR(f"❌ Record with ID={record_id} does not exist"))
                return
        elif url_filter:
            try:
                page = NetworkMonitoredPage.objects.get(url=url_filter)
            except NetworkMonitoredPage.DoesNotExist:
                self.stdout.write(self.style.ERROR(f"❌ Record with URL={url_filter} does not exist"))
                return
        else:
            self.stdout.write(self.style.ERROR("❌ You must provide --id or --url"))
            return

        # These are already Python objects (from JSONField)
        image_links = page.image_links
        parse_data = page.parse_data
        url = page.url

        # raw_data may be a stringified JSON or plain text
        raw = page.raw_data
        try:
            raw_data_parsed = json.loads(raw) if raw and isinstance(raw, str) else raw
        except Exception:
            raw_data_parsed = raw

        # Build output dict
        out = {
            "id": page.id,
            "url": url,
            "image_links": image_links,
            "raw_data": raw_data_parsed,
            "parse_data": parse_data,
        }

        pretty = json.dumps(out, indent=2, ensure_ascii=False)

        if output_file:
            with open(output_file, "w", encoding="utf-8") as f:
                f.write(pretty)
            self.stdout.write(self.style.SUCCESS(f"✅ JSON saved to {output_file}"))
        else:
            self.stdout.write(pretty)
