"""Test HTTP-based scraping - no Selenium, no Chrome, no crashes."""
import requests
import re
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.9',
}

url = 'https://www.instagram.com/p/DVOazPSjJQm/'

# ===== Method 1: Instagram oEmbed API =====
print("=== Method 1: oEmbed API ===")
try:
    oembed_url = f"https://api.instagram.com/oembed/?url={url}&omitscript=true"
    r = requests.get(oembed_url, headers=headers, timeout=10)
    print(f"Status: {r.status_code}")
    if r.status_code == 200:
        data = r.json()
        print(f"Author: {data.get('author_name', 'N/A')}")
        print(f"Title: {data.get('title', 'N/A')}")
        print(f"Thumbnail: {data.get('thumbnail_url', 'N/A')[:80]}")
        # The HTML field sometimes contains engagement data
        embed_html = data.get('html', '')
        print(f"Embed HTML length: {len(embed_html)}")
    else:
        print(f"Response: {r.text[:200]}")
except Exception as e:
    print(f"Error: {e}")

# ===== Method 2: Direct embed page fetch =====
print("\n=== Method 2: Embed Page HTML ===")
try:
    embed_url = f"https://www.instagram.com/p/DVOazPSjJQm/embed/"
    r = requests.get(embed_url, headers=headers, timeout=10)
    print(f"Status: {r.status_code}")
    html = r.text
    print(f"HTML length: {len(html)}")
    
    # Search for metrics in embed HTML
    patterns = [
        ('like_count', r'"like_count"\s*:\s*(\d+)'),
        ('comment_count', r'"comment_count"\s*:\s*(\d+)'),
        ('play_count', r'"play_count"\s*:\s*(\d+)'),
        ('video_view_count', r'"video_view_count"\s*:\s*(\d+)'),
        ('edge_media_preview_like', r'"edge_media_preview_like"\s*:\s*\{\s*"count"\s*:\s*(\d+)'),
        ('edge_media_preview_comment', r'"edge_media_preview_comment"\s*:\s*\{\s*"count"\s*:\s*(\d+)'),
        ('username', r'"username"\s*:\s*"([^"]+)"'),
        ('view_count', r'"view_count"\s*:\s*(\d+)'),
    ]
    for name, pat in patterns:
        m = re.search(pat, html)
        if m:
            print(f"  FOUND {name}: {m.group(1)}")
        else:
            print(f"  NOT FOUND: {name}")
    
    # Also look for "X likes" / "X views" in HTML text
    text_patterns = [
        ('likes_text', r'(\d[\d,]*)\s*likes?'),
        ('views_text', r'(\d[\d,]*)\s*views?'),
        ('comments_text', r'(\d[\d,]*)\s*comments?'),
    ]
    for name, pat in text_patterns:
        m = re.search(pat, html, re.IGNORECASE)
        if m:
            print(f"  FOUND {name}: {m.group(1)}")
    
    # Save for inspection
    with open('test_embed_http.html', 'w', encoding='utf-8') as f:
        f.write(html)
    print("  Saved to test_embed_http.html")
    
except Exception as e:
    print(f"Error: {e}")

# ===== Method 3: Direct page fetch (may get login wall) =====
print("\n=== Method 3: Direct Page ===")
try:
    r = requests.get(url, headers=headers, timeout=10)
    print(f"Status: {r.status_code}")
    html = r.text
    print(f"HTML length: {len(html)}")
    
    for name, pat in patterns:
        m = re.search(pat, html)
        if m:
            print(f"  FOUND {name}: {m.group(1)}")
            
except Exception as e:
    print(f"Error: {e}")

# ===== Method 4: graphql/query endpoint =====
print("\n=== Method 4: GraphQL Endpoint ===")
try:
    shortcode = 'DVOazPSjJQm'
    gql_url = f"https://www.instagram.com/graphql/query/?query_hash=b3055c01b4b222b8a47dc12b090e4e64&variables=%7B%22shortcode%22%3A%22{shortcode}%22%7D"
    r = requests.get(gql_url, headers=headers, timeout=10)
    print(f"Status: {r.status_code}")
    if r.status_code == 200:
        try:
            data = r.json()
            media = data.get('data', {}).get('shortcode_media', {})
            print(f"  Likes: {media.get('edge_media_preview_like', {}).get('count', 'N/A')}")
            print(f"  Comments: {media.get('edge_media_preview_comment', {}).get('count', 'N/A')}")
            print(f"  Views: {media.get('video_view_count', 'N/A')}")
            print(f"  Owner: {media.get('owner', {}).get('username', 'N/A')}")
        except:
            print(f"  Response (first 300): {r.text[:300]}")
    else:
        print(f"  Response (first 300): {r.text[:300]}")
except Exception as e:
    print(f"Error: {e}")

print("\nDone!")
