from floof.model.art import Art, Tag, TagText

def do_search(query):
    tags = query.split()

    tagtexts = TagText.query.filter(TagText.text.in_(tags))
    tagtext_ids = [_.id for _ in tagtexts]

    # Fetch art that has all the tags
    artwork = Art.query.join(Tag) \
                   .filter(Tag.tagtext_id.in_(tagtext_ids)) \
                   .all()
    return artwork






# unfinished stuff
def parse(query):
    words = query.split()

    tags = []
    for word in words:
        components = word.split(':')
        if len(components) == 1:
            # tags are plain.
            tags.append(word)
        elif components[0] == "rating":
            if components[1].isnumeric():
                score = int(components[1])
            else:
                score = Rating.reverse_options.get(components[1])

            if -1 <= score <= 3:
                pass
                # TODO: Find stuff that has this rating
                # Rating.query.filter(Rating.s)

    tagtexts = TagText.query.filter(TagText.text.in_(tags))
    tagtext_ids = map(lambda x:x.id, tagtexts)

