from typing import Self

from flask import current_app

from bricktracker.exceptions import NotFoundException

from .rebrickable_set import RebrickableSet
from .record_list import BrickRecordList
from .wish import BrickWish


# All the wished sets from the database
class BrickWishList(BrickRecordList[BrickWish]):
    # Queries
    select_query: str = 'wish/list/all'

    # All the wished sets
    def all(self, /) -> Self:
        # Load the wished sets from the database
        for record in self.select(
            order=current_app.config['WISHES_DEFAULT_ORDER'].value
        ):
            brickwish = BrickWish(record=record)

            self.records.append(brickwish)

        return self

    # Add a set to the wishlist
    @staticmethod
    def add(set_num: str, /) -> None:
        # Check if it already exists
        try:
            set_num = RebrickableSet.parse_number(set_num)
            BrickWish().select_specific(set_num)
        except NotFoundException:
            RebrickableSet.wish(set_num)
