import random
from fe.access import book
from fe.access.new_seller import register_new_seller
from fe import conf


class GenBook:
    def __init__(self, user_id, store_id):
        self.user_id = user_id
        self.store_id = store_id
        self.password = self.user_id
        self.seller = register_new_seller(self.user_id, self.password)
        code = self.seller.create_store(store_id)
        assert code == 200
        self.__init_book_list__()

    def __init_book_list__(self):
        self.buy_book_info_list = []
        self.buy_book_id_list = []

    def gen(
        self, non_exist_book_id: bool, low_stock_level, max_book_count: int = 100
    ) -> (bool, []):
        self.__init_book_list__()
        ok = True
        book_db = book.BookDB()
        rows = book_db.get_book_count()
        start = 0
        if rows > max_book_count:
            start = random.randint(0, rows - max_book_count)

        size = random.randint(1, max_book_count)

        books = book_db.get_book_info(start, size)

        book_id_exist = []
        book_id_stock_level = {}

        for bk in books:

            if low_stock_level:
                stock_level = random.randint(0, 100)
            else:
                stock_level = random.randint(2, 100)

            # add the book to the store
            code = self.seller.add_book(self.store_id, stock_level, bk)

            assert code == 200
            book_id_stock_level[bk.id] = stock_level
            book_id_exist.append(bk)

        for bk in book_id_exist:
            stock_level = book_id_stock_level[bk.id]
            if stock_level > 1:
                buy_num = random.randint(1, stock_level)
            else:
                buy_num = 0

            # add a new pair
            if non_exist_book_id:
                bk.id = bk.id + "_x"

            # fail to buy book
            if low_stock_level:
                buy_num = stock_level + 1
            self.buy_book_info_list.append((bk, buy_num))

        for item in self.buy_book_info_list:
            self.buy_book_id_list.append((item[0].id, item[1]))

        return ok, self.buy_book_id_list
