"""
Mòdul que conté la implementació de la classe Albumbase
"""
from datetime import timedelta
from pessa_musical import PeçaMusical


class AlbumBase:
    """
    Classe AlbumBase representa un àlbum de música d'un autor
    composat per peces musicals.
    """
    def __init__(self, titol, autor, nombre_peces):
        """
        - Inicialitza el atributs públics ``titol`` i ``autor``
          a partir dels valors dels paràmetres corresponents.

        - Inicialitza una llista de ``nombre_peces`` elements que
          serà un atribut privat. El valor inicial de cada un dels
          elements de la llista ha de una Peça sense títol i de
          durada 0
        """
        self.titol = titol
        self.autor = autor
        self.__peces = [PeçaMusical("", timedelta(seconds=0))] * nombre_peces

    def __getitem__(self, i):
        """
        Retorna el titol de la peça i-éssima de l'àlbum.

        Cal que 0 <= i < ``len(self)``.
        """
        return self.__peces[i]

    def __setitem__(self, i, valor):
        """
        Assigna la  peça musical `valor`` a la peça i-éssima de l'àlbum.
        Cal que 0 <= i < ``len(self)``.
        """
        self.__peces[i] = valor

    def __len__(self):
        """
        Retorna el nombre de peces que té l'àlbum (el mateix valor que
        el paràmetre ``nombre_peces`` de ``__init__``)
        """
        return len(self.__peces)

    def __contains__(self, p):
        """
        Retorna ``True`` si l'àlbum conté la peça ``p``
        """
        return p in self.__peces


# Solució 2

class AlbumBase_2(list):

    def __init__(self, titol, autor, nombre_peces):
        super().__init__()
        self.titol = titol
        self.autor = autor
        self.extend([PeçaMusical("", timedelta(seconds=0))] * nombre_peces)
