#ifndef VFILESESSIONINFO_H
#define VFILESESSIONINFO_H

#include "vconstants.h"

struct VEditTabInfo;
class QSettings;

namespace FileSessionConfig
{
    static const QString c_file = "file";
    static const QString c_mode = "mode";

    // Index in outline of the anchor.
    static const QString c_headerIndex = "header_index";

    static const QString c_cursorBlockNumber = "cursor_block_number";
    static const QString c_cursorPositionInBlock = "cursor_position_in_block";
}

// Information about an opened file (session).
class VFileSessionInfo
{
public:
    VFileSessionInfo();

    VFileSessionInfo(const QString &p_file,
                     OpenFileMode p_mode);

    // Fetch VFileSessionInfo from @p_tabInfo.
    static VFileSessionInfo fromEditTabInfo(const VEditTabInfo *p_tabInfo);

    // Fill corresponding fields of @p_tabInfo.
    void toEditTabInfo(VEditTabInfo *p_tabInfo) const;

    // Fetch VFileSessionInfo from @p_settings.
    static VFileSessionInfo fromSettings(const QSettings *p_settings);

    void toSettings(QSettings *p_settings) const;

    // Absolute path of the file.
    QString m_file;

    // Mode of this file in this session.
    OpenFileMode m_mode;

    // Index in outline of the header.
    int m_headerIndex;

    // Block number of cursor block.
    int m_cursorBlockNumber;

    // Position in block of cursor.
    int m_cursorPositionInBlock;
};

#endif // VFILESESSIONINFO_H
