#include "artist.h"
#include "record.h"
#include "song.h"
#include "musicobjectprivate.h"
#include "musiclibraryprivate.h"

// Private data of an record inherits name and library reference from MusicObjectPrivate
class RecordPrivate : public MusicObjectPrivate
{
public:
    RecordPrivate(MusicLibraryPrivate *lib) : MusicObjectPrivate(lib) {}
    QDateTime releaseDate;
    QString coverArt;
};

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

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

Artist *Record::artist()
{
    return static_cast<Artist *>(parent());
}

void Record::setReleaseDate(const QDateTime &releaseDate)
{
    static_cast<RecordPrivate *>(pPtr)->releaseDate = releaseDate;
    pPtr->library->changed(this);
}

QDateTime Record::releaseDate() const
{
    return static_cast<RecordPrivate *>(pPtr)->releaseDate;
}

void Record::setCoverArtFile(const QString &fileName)
{
    static_cast<RecordPrivate *>(pPtr)->coverArt = fileName;
    pPtr->library->changed(this);
}

QString Record::coverArtFile() const
{
    return static_cast<RecordPrivate *>(pPtr)->coverArt;
}

QList<Song *> Record::songs() const
{
    QList<Song *> list;
    QList<QObject *> songObjects = children();
    foreach (QObject *song, songObjects) {
        list.append(qobject_cast<Song *>(song));
    }
    return list;
}
