#include "filesystem.h"
#include <QDebug>
#include <QSettings>

bool FileSystem::fileExists(QString path) {
    QFileInfo check_file(path);
    bool exists = check_file.exists() && check_file.isFile();
    if (exists == false)
        qWarning("%s:%i: %s%s", __FILE__, __LINE__, "Файл не найден: ", path.toStdString().c_str());
    else
        qInfo("%s:%i: %s%s", __FILE__, __LINE__, "Файл найден: ", path.toStdString().c_str());
    return exists;
}

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

void FileSystem::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 FileSystem::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(FileSystem::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")) && FileSystem::fileExists(key)){
              QString folder = n.value(key).toString()
                      .replace("\\", "/")
                      .replace("/TurbineLauncher.exe", "")
                      .replace("/LotroLauncher.exe", "")
                      .replace("\"", "");

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

    return paths;

}
