import requests, json, time, csv

API_KEY = "apify_api_P3r95DNB3QjDySjpUWrFPQzVKvKNOO09xnav"
ACTOR_ID = "compass~crawler-google-places"

payload = {
 "searchStringsArray": ["commercial cleaning companies"],
 "locationQuery": "Denver, Colorado, USA",
 "maxCrawledPlacesPerSearch": 100,
 "language": "en",
 "exportPlaceUrls": False,
 "includeHistogramData": False,
 "includeOpeningHours": False,
 "includeReviews": False,
 "includeImages": False
}

print("Starting Apify scrape for Denver, Colorado...")
print(f"Target: 100 commercial cleaning companies")

run = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR_ID}/runs",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"input": payload}
).json()

print(f"API Response: {run}")

if "data" not in run:
    print(f"Error: {run}")
    exit(1)

run_id = run["data"]["id"]
print(f"Run started: {run_id}")

# Wait for completion
while True:
    status = requests.get(
        f"https://api.apify.com/v2/acts/{ACTOR_ID}/runs/{run_id}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    ).json()["data"]["status"]
    print(f"Status: {status}")
    if status in ["SUCCEEDED", "FAILED"]:
        break
    time.sleep(10)

if status == "FAILED":
    print("Run failed!")
    exit(1)

# Get results
dataset_id = requests.get(
    f"https://api.apify.com/v2/acts/{ACTOR_ID}/runs/{run_id}",
    headers={"Authorization": f"Bearer {API_KEY}"}
).json()["data"]["defaultDatasetId"]

items = requests.get(
    f"https://api.apify.com/v2/datasets/{dataset_id}/items?format=json&clean=true",
    headers={"Authorization": f"Bearer {API_KEY}"}
).json()

print(f"Scraped {len(items)} places")

# Save to CSV - using correct path /data/openclaw/leads/raw/
output_path = "/data/openclaw/leads/raw/denver-2026-03-12.csv"

# Define CSV columns
fieldnames = ["business_name", "phone", "website", "address", "rating", "review_count", "category", "scrape_date"]

with open(output_path, "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    for item in items:
        writer.writerow({
            "business_name": item.get("title", ""),
            "phone": item.get("phone", ""),
            "website": item.get("website", ""),
            "address": item.get("address", ""),
            "rating": item.get("totalScore", ""),
            "review_count": item.get("reviewsCount", ""),
            "category": item.get("categoryName", ""),
            "scrape_date": "2026-03-12"
        })

print(f"Saved to {output_path}")

# Show sample
print("\n--- Sample (first 5) ---")
for item in items[:5]:
    print(f"  {item.get('title')} - {item.get('phone')} - {item.get('totalScore')} stars")
