import requests
import random
from PIL import Image
import io

class ArtFetch:
    def __init__(self):
        self.base_url = "https://collectionapi.metmuseum.org/"
        self.objects = self.fetch_objects() # chosen set of images to select randomly
        

    def fetch_objects(self):
        """We restrict ourselves to a few domains."""
        # fetch all departements
        t = requests.get(self.base_url + "public/collection/v1/departments").json()
        deps = t["departments"]
        keep_id = []
        for d in deps:
            name = d["displayName"]
            if name == "American Decorative Arts" or name == "Arts of Africa, Oceania, and the Americas" or name == "Asian Art" or name == "European Paintings":
                keep_id.append(str(d["departmentId"]))
        # fetch artworks listed under these departments
        data = {"departmentIds" : "|".join(keep_id)}
        t = requests.get(self.base_url + "public/collection/v1/objects",params=data).json()
        # num = t["total"]
        ids = t["objectIDs"]
        return ids

    def get_random_art(self):
        """Returns an image object of a randomly selected artwork"""
        # fetch the artwork's url
        r_id = self.objects[random.randint(0,len(self.objects))]
        t = requests.get(self.base_url + "public/collection/v1/objects/" + str(r_id)).json()
        im_url = t["primaryImageSmall"]
        # download the image
        resp = requests.get(im_url)
        img = Image.open(io.BytesIO(resp.content))

        return img