#!/usr/bin/python3
import requests
import sys
import time


def main():
    sys.stdout.reconfigure(line_buffering=True)
    sys.stderr.reconfigure(line_buffering=True)

    sess = requests.Session()
    base_url = "https://en.wikipedia.org/w/api.php"
    base_params = {
        "action": "query",
        "format": "json",
        "list": "allpages",
        "apprefix": "List of ",
        "aplimit": "500",
    }

    continue_token = None
    while True:
        more_params = {} if continue_token is None else {'apcontinue': continue_token}
        response = sess.get(
            url=base_url,
            params={**base_params, **more_params},
            headers={'user-agent': 'lists-fetcher/0.1.0'},
        )
        if response.status_code != 200:
            print(f"Non-200 status: {response.status_code} {response.text}", file=sys.stderr)
            break

        try:
            result = response.json()
        except:
            breakpoint()

        if 'error' in result:
            raise Exception(result['error'])
        if 'warnings' in result:
            print(repr(result['warnings']), file=sys.stderr)

        pages = result["query"]["allpages"]

        for page in pages:
            print(page["title"])

        if 'continue' in result:
            continue_token = result['continue']['apcontinue']
            time.sleep(10)
        else:
            break


if __name__ == '__main__':
    main()
