from itertools import groupby
from app import get_db_connection

conn=get_db_connection()

todos=conn.execute('SELECT c.id, c.content, cat.category_name  \
                      FROM cards c JOIN categories cat \
                      ON c.category_id = cat.id ORDER BY cat.category_name').fetchall()

categories={}

 # for each category and group of cards for each cat in groupby() grouper object   
for k, g in groupby(todos, key=lambda t: t['category_name']):
    cards=[]

    # for each card get the topic it is assigned to
    for card in g:
        topics = conn.execute('SELECT t.id, t.content FROM topics t \
                                JOIN topic_cards t_c \
                                ON t.id = t_c.topic_id \
                                WHERE t_c.card_id = ?',
                                (card['id'],)).fetchall()
        
        #convert the row into a disctionary to add topics
        card=dict(card)
        card['topics'] = topics
        print('card is:', card)

        cards.append(card)
        # print(categories[k])

    categories[k]=list(cards)
    

print('THE GROUP  category.items() is :', categories.items())
for cat, cards in categories.items():  # ♥ .items is a build in attribute of the dictionary(?)

    for card in cards:
        topic_names = [t['content'] for t in card['topics']]
        print('card:', card['content'])
        print('     category:', cat)
        print('     topic:', list(topic_names))

conn.close()


# ♥ ♥ ♥ ♥