#ifndef FILESYSTEM_H
#define FILESYSTEM_H

#include <QObject>
#include <QFile>
#include <QDir>
#include <QFileInfo>
#include <QCryptographicHash>
#include <QDebug>
#include <QSettings>

#include "filesystem.h"

namespace FileSystem {
    bool fileExists(QString path) {
        QFileInfo check_file(path);
        return check_file.exists() && check_file.isFile();
    }

    bool folderExists(QString path) {
        return QDir(path).exists();
    }

    bool createFilePath(QString file_path) { // Creates all necessary directories for file
        QDir dir;
        return dir.mkpath(QFileInfo(file_path).absoluteDir().absolutePath());
    }

    QString fileHash(const QString &fileName, QCryptographicHash::Algorithm hashAlgorithm = QCryptographicHash::Md5) {
        QFile file(fileName);
        if (file.open(QIODevice::ReadOnly)) {
            QCryptographicHash hash(hashAlgorithm);
            hash.addData(&file);
            QByteArray hashData = hash.result();
            return hashData.toHex();
        }
        return QByteArray();
    }


    void clearFolder(QDir &dir) {
        //Получаем список файлов
        QStringList lstFiles = dir.entryList(QDir::Files);

        //Удаляем файлы
        foreach (QString entry, lstFiles){
            QString entryAbsPath = dir.absolutePath() + "/" + entry;
            //QFile::setPermissions(entryAbsPath, QFile::ReadOwner | QFile::WriteOwner);
            qDebug() << dir.absolutePath();
            QFile::remove(entryAbsPath);
        }
    }


    QStringList recognizeRegistryLotroPath() {
        QStringList paths;

        #ifdef _WIN32
            // Windows 8, 10
            QSettings n("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\12bbe590-c890-11d9-9669-0800200c9a66_is1", QSettings::NativeFormat);
            foreach (QString key, n.allKeys()) {
                qDebug() << key;
                if(key.contains("InstallLocation") || key.contains("installlocation")){
                    QString folder = n.value(key).toString()
                            .replace("\\", "/")
                            .replace("/TurbineLauncher.exe", "")
                            .replace("/LotroLauncher.exe", "")
                            .replace("\"", "");

                    if(fileExists(folder + "/LotroLauncher.exe"))
                        paths.append(folder);
                }
            }


            // Windows 7
            QSettings m("HKEY_CLASSES_ROOT\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache", QSettings::NativeFormat);
            foreach (QString key, m.allKeys()) {
              if((key.contains("TurbineLauncher.exe") || key.contains("LotroLauncher.exe")) && fileExists(key)){
                  QString folder = n.value(key).toString()
                          .replace("\\", "/")
                          .replace("/TurbineLauncher.exe", "")
                          .replace("/LotroLauncher.exe", "")
                          .replace("\"", "");

                  if(fileExists(folder + "/LotroLauncher.exe"))
                      paths.append(folder);
              }
            }
        #else
            // Реализация под Linux
        #endif

        return paths;
    }
}

#endif // FILESYSTEM_H
