import requests
import json
import time

# Global constant for Authorization header
DONNA_AUTH_HEADER = "Basic bW9iYWltdXNpY3VzZXI6TW9iYWltdXNpYzE0MjYhaGlnaGZpdmU="
# Authorization: Basic bW9iYWltdXNpY3VzZXI6TW9iYWltdXNpYzE0MjYhaGlnaGZpdmU=


def fetch_donna_external_ids(page_number, device_id, auth_header=DONNA_AUTH_HEADER):
    url = "https://donna.appsthatworth.com/explore/new"

    params = {"limit": "20", "page": str(page_number), "review": "false"}

    headers = {
        "Host": "donna.appsthatworth.com",
        "invitefriendab": "1",
        "version": "1.0.39",
        "current": str(int(time.time() * 1000000)),  # Current epoch microseconds
        "Authorization": auth_header,
        "Accept": "*/*",
        "premium": "false",
        "creditgroup": "first",
        "Accept-Language": "en-US;q=1.0",
        "showsingle": "true",
        "Cache-Control": "no-cache",
        "deviceId": device_id,
        "User-Agent": "donna/1.0.39 (com.ai.sound.donna; build:11; iOS 18.0.0) Alamofire/5.9.1",
        "lang": "en",
        "Connection": "keep-alive",
    }

    proxies = {"http": "http://localhost:9090", "https": "http://localhost:9090"}

    response = requests.get(
        url, params=params, headers=headers, verify=False, proxies=proxies
    )

    if response.status_code == 200:
        data = response.json()
        external_ids = [item["externalId"] for item in data["data"]]
        return external_ids
    else:
        print(f"Error: {response.status_code}")
        return []


# Example usage
if __name__ == "__main__":
    import random
    import time
    from datetime import datetime

    # device_id = "2DF22A37-D8D0-498B-8E38-9B6F17134D63"
    device_id = "02167ECA-E096-4B3A-8A9A-16EA8AC8E8B2"
    all_external_ids = []

    # Generate a unique filename with date and time
    current_time = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"donna_recent_clip_ids_{current_time}.txt"

    for page_number in range(
        1, 2500
    ):  # 2640 was the last page we could fetch without 503 timeout
        external_ids = fetch_donna_external_ids(page_number, device_id)
        if external_ids:
            print(f"External IDs for page {page_number}:")
            for ext_id in external_ids:
                print(ext_id)
            all_external_ids.extend(external_ids)

            # Append the most recent batch of IDs to the file
            with open(filename, "a") as f:
                for ext_id in external_ids:
                    f.write(f"{ext_id}\n")
            print(f"Appended {len(external_ids)} IDs to {filename}")
        else:
            print(f"No external IDs found for page {page_number}")
            break

        # Sleep for a random duration between 2000 and 7000 milliseconds
        sleep_duration = random.uniform(2, 7)
        time.sleep(sleep_duration)

    print(f"Total external IDs fetched: {len(all_external_ids)}")
