/******************************************************************************!
 * \file List.h
 * \author Sebastien Beaugrand
 * \sa http://beaugrand.chez.com/
 * \copyright CeCILL 2.1 Free Software license
 ******************************************************************************/
#include <string>
#include <list>
#include <tuple>
#include <jsoncpp/json/value.h>

/******************************************************************************!
 * \class List
 ******************************************************************************/
class List
{
public:
    struct Part {
        std::string name;
        int weight;
        int size;
        std::list<std::string> list;
        std::string abrev;
    };
    explicit List(std::string_view path);
    std::tuple<std::string, std::string, int> rand() const;
    Json::Value artist(const std::string& artist,
                       const std::string& album) const;
    std::string album(const std::string& search, int pos) const;
    int readResumeTime() const;
    void writeResumeTime(int ms) const;
    void writeLog(std::string_view album) const;
    Json::Value dir(const std::string& path) const;
private:
    void push(const std::string& path);
    void readList();
    void readWeights();
    void readAbrev();
    void readLog();
    int timediff(std::string_view line) const;

    std::string mPath;
    std::list<Part> mList;
    int mWeightSum = 0;
};