#ifndef GITDIFF_H
#define GITDIFF_H

#include <QObject>
#include <QMap>
#include <QString>

#include <gitbase.h>

struct git_commit;

class GitRepository;
class GitCommit;
class DiffModel;
struct git_diff;

class GitDiff : public GitBase<git_diff>
{
    Q_OBJECT
    Q_PROPERTY(QStringList files READ files CONSTANT)

public:
    static GitDiff* diff(GitCommit* a, GitCommit* b);
    static GitDiff* diff(GitCommit* a);

    ~GitDiff();
    void reset();

    Q_INVOKABLE DiffModel* model(const QString& file);

    QStringList files();

private:
    GitDiff(git_diff* raw, GitRepository* repository);

    void readBody(git_diff* diff);

    QMap<QString, QPointer<DiffModel> > m_diffList;
};

#endif // GITDIFF_H