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

// Private data of an song inherits name and library reference from MusicObjectPrivate
class SongPrivate : public MusicObjectPrivate
{
public:
    SongPrivate(MusicLibraryPrivate *lib) : MusicObjectPrivate(lib) {}
    int number;
    QString musicFile;
};

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

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

Record *Song::record()
{
    return static_cast<Record *>(parent());
}

void Song::setNumber(int number)
{
    static_cast<SongPrivate *>(pPtr)->number = number;
    pPtr->library->changed(this);
}

int Song::number() const
{
    return static_cast<SongPrivate *>(pPtr)->number;
}

void Song::setMusicFile(const QString &fileName)
{
    static_cast<SongPrivate *>(pPtr)->musicFile = fileName;
    pPtr->library->changed(this);
}

QString Song::musicFile() const
{
    return static_cast<SongPrivate *>(pPtr)->musicFile;
}
