"""Download cat images from TheCatAPI.

Fetches cat images in batches and saves them to a local directory.
"""

import json
import logging
from pathlib import Path

import requests

_logger = logging.getLogger(__name__)

MAX_REQUESTS = 90
REQUEST_TIMEOUT = 30  # seconds


def _download_single_image(image_url: str) -> None:
    """Download and save a single image from URL.

    Args:
        image_url: The URL of the image to download.
    """
    try:
        # Get the image content
        resp = requests.get(image_url, timeout=REQUEST_TIMEOUT)
        resp.raise_for_status()  # Raise an exception for HTTP errors

        # Extract the image name from the URL
        image_name = Path(image_url).name
        image_path = Path("./CATS2/") / image_name

        # Save the image to the directory
        with image_path.open("wb") as file:
            file.write(resp.content)

        _logger.info("Saved %s as %s", image_url, image_path)

    except requests.exceptions.RequestException:
        _logger.exception("Failed to download %s", image_url)


def main() -> None:
    """Download cat images from TheCatAPI."""
    requests_sent = 0
    while requests_sent < MAX_REQUESTS:
        res = requests.get(
            "https://api.thecatapi.com/v1/images/search?limit=100&api_key=",
            timeout=REQUEST_TIMEOUT,
        )
        requests_sent += 1
        response = json.loads(res.text)
        urls = [cat.get("url") for cat in response]

        Path("./CATS2").mkdir(parents=True, exist_ok=True)
        for url in urls:
            _download_single_image(url)


if __name__ == "__main__":
    main()
