#include "record.h"
#include "musiclibrary.h"
#include "musicobjectprivate.h"
#include "musiclibraryprivate.h"

// Private data of an artist inherits name and library reference from MusicObjectPrivate
class ArtistPrivate : public MusicObjectPrivate
{
public:
    ArtistPrivate(MusicLibraryPrivate *lib) : MusicObjectPrivate(lib) {}
    QUrl homePage;
};

Artist::Artist(MusicLibrary *parent) : MusicObject(parent)
{
    // Library pointer is passed around, so the common signal can be used
    pPtr = new ArtistPrivate(parent->privatePtr());
}

Artist::~Artist()
{
    delete pPtr;
}

MusicLibrary *Artist::library()
{
    return static_cast<MusicLibrary *>(parent());
}

void Artist::setHomePage(const QUrl &hp)
{
    // The private pointer is stored as MusicObjectPrivate
    // so we'll need to cast it to ArtistPrivate in order
    // to use the artist object members
    static_cast<ArtistPrivate *>(pPtr)->homePage = hp;
    pPtr->library->changed(this);
}

QUrl Artist::homePage() const
{
    // The private pointer is stored as MusicObjectPrivate
    // so we'll need to cast it to ArtistPrivate in order
    // to use the artist object members
    return static_cast<ArtistPrivate *>(pPtr)->homePage;
}

QList<Record *> Artist::records() const
{
    // Qt object model stores child objects as
    // QList<QObject *>, which cannot be directly
    // cast into QList<Record *>. Thus, we'll need
    // to add the objects to a new list.
    QList<Record *> list;
    QList<QObject *> recordObjects = children();
    foreach (QObject *record, recordObjects) {
        list.append(qobject_cast<Record *>(record));
    }
    return list;
}
