"""queue implementation using Python list"""


from container import Container
from linked_list_Wed import LinkedList

class Queue(Container):
    """
    First-in, first-out (FIFO) Queue.
    """

    def __init__(self) -> None:
        """
        Create a new, empty Queue self.

        Overrides Container.__init__
        """
        self._storage = LinkedList()

    def add(self, obj: object) -> None:
        """
        Add object obj to top of Queue self.
        """
        self._storage.append(obj)

    def remove(self) -> object:
        """
        Remove and return top element of Queue self.

        Assume Queue self is not empty.
        >>> s = Queue()
        >>> s.add(5)
        >>> s.add(7)
        >>> s.remove()
        5
        """
        return self._storage.pop_front()

    def is_empty(self) -> bool:
        """
        Return whether Queue self is empty.

        >>> Queue().is_empty()
        True
        """
        return self._storage.size == 0


if __name__ == "__main__":
    import doctest
    doctest.testmod()
