// SPDX-License-Identifier: GPL-3.0-only
/*
 *  Prism Launcher - Minecraft Launcher
 *  Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, version 3.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 * This file incorporates work covered by the following copyright and
 * permission notice:
 *
 *      Copyright 2013-2021 MultiMC Contributors
 *
 *      Licensed under the Apache License, Version 2.0 (the "License");
 *      you may not use this file except in compliance with the License.
 *      You may obtain a copy of the License at
 *
 *          http://www.apache.org/licenses/LICENSE-2.0
 *
 *      Unless required by applicable law or agreed to in writing, software
 *      distributed under the License is distributed on an "AS IS" BASIS,
 *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *      See the License for the specific language governing permissions and
 *      limitations under the License.
 */

#include <QObject>
#include "BuildConfig.h"

const Config BuildConfig;

Config::Config()
{
    // Name and copyright
    LAUNCHER_NAME = "@Launcher_Name@";
    LAUNCHER_APP_BINARY_NAME = "@Launcher_APP_BINARY_NAME@";
    LAUNCHER_DISPLAYNAME = "@Launcher_DisplayName@";
    LAUNCHER_COPYRIGHT = "@Launcher_Copyright@";
    LAUNCHER_DOMAIN = "@Launcher_Domain@";
    LAUNCHER_CONFIGFILE = "@Launcher_ConfigFile@";
    LAUNCHER_GIT = "@Launcher_Git@";
    LAUNCHER_APPID = "@Launcher_AppID@";
    LAUNCHER_SVGFILENAME = "@Launcher_SVGFileName@";
    LAUNCHER_ENVNAME = "@Launcher_ENVName@";

    USER_AGENT = "@Launcher_UserAgent@";

    // Version information
    VERSION_MAJOR = @Launcher_VERSION_MAJOR@;
    VERSION_MINOR = @Launcher_VERSION_MINOR@;
    VERSION_PATCH = @Launcher_VERSION_PATCH@;

    BUILD_PLATFORM = "@Launcher_BUILD_PLATFORM@";
    BUILD_ARTIFACT = "@Launcher_BUILD_ARTIFACT@";
    BUILD_DATE = "@Launcher_BUILD_TIMESTAMP@";
    UPDATER_GITHUB_REPO = "@Launcher_UPDATER_GITHUB_REPO@";

    COMPILER_NAME = "@Launcher_COMPILER_NAME@";
    COMPILER_VERSION = "@Launcher_COMPILER_VERSION@";

    COMPILER_TARGET_SYSTEM = "@Launcher_COMPILER_TARGET_SYSTEM@";
    COMPILER_TARGET_SYSTEM_VERSION = "@Launcher_COMPILER_TARGET_SYSTEM_VERSION@";
    COMPILER_TARGET_SYSTEM_PROCESSOR = "@Launcher_COMPILER_TARGET_PROCESSOR@";

    MAC_SPARKLE_PUB_KEY = "@MACOSX_SPARKLE_UPDATE_PUBLIC_KEY@";
    MAC_SPARKLE_APPCAST_URL = "@MACOSX_SPARKLE_UPDATE_FEED_URL@";

    if (!MAC_SPARKLE_PUB_KEY.isEmpty() && !MAC_SPARKLE_APPCAST_URL.isEmpty()) {
        UPDATER_ENABLED = true;
    } else if (!UPDATER_GITHUB_REPO.isEmpty() && !BUILD_ARTIFACT.isEmpty()) {
        UPDATER_ENABLED = true;
    }

#cmakedefine01 Launcher_ENABLE_JAVA_DOWNLOADER
    JAVA_DOWNLOADER_ENABLED = Launcher_ENABLE_JAVA_DOWNLOADER;

    GIT_COMMIT = "@Launcher_GIT_COMMIT@";
    GIT_TAG = "@Launcher_GIT_TAG@";
    GIT_REFSPEC = "@Launcher_GIT_REFSPEC@";

    // Assume that builds outside of Git repos are "stable"
    if (GIT_REFSPEC == QStringLiteral("GITDIR-NOTFOUND") || GIT_TAG == QStringLiteral("GITDIR-NOTFOUND") ||
        GIT_REFSPEC == QStringLiteral("") || GIT_TAG == QStringLiteral("GIT-NOTFOUND")) {
        GIT_REFSPEC = "refs/heads/stable";
        GIT_TAG = versionString();
        GIT_COMMIT = "";
    }

    if (GIT_REFSPEC.startsWith("refs/heads/")) {
        VERSION_CHANNEL = GIT_REFSPEC;
        VERSION_CHANNEL.remove("refs/heads/");
    } else if (!GIT_COMMIT.isEmpty()) {
        VERSION_CHANNEL = GIT_COMMIT.mid(0, 8);
    } else {
        VERSION_CHANNEL = "unknown";
    }

    NEWS_RSS_URL = "@Launcher_NEWS_RSS_URL@";
    NEWS_OPEN_URL = "@Launcher_NEWS_OPEN_URL@";
    WIKI_URL = "@Launcher_WIKI_URL@";
    HELP_URL = "@Launcher_HELP_URL@";
    LOGIN_CALLBACK_URL = "@Launcher_LOGIN_CALLBACK_URL@";
    IMGUR_CLIENT_ID = "@Launcher_IMGUR_CLIENT_ID@";
    MSA_CLIENT_ID = "@Launcher_MSA_CLIENT_ID@";
    FLAME_API_KEY = "@Launcher_CURSEFORGE_API_KEY@";
    META_URL = "@Launcher_META_URL@";
    LEGACY_FMLLIBS_BASE_URL = "@Launcher_LEGACY_FMLLIBS_BASE_URL@";

    GLFW_LIBRARY_NAME = "@Launcher_GLFW_LIBRARY_NAME@";
    OPENAL_LIBRARY_NAME = "@Launcher_OPENAL_LIBRARY_NAME@";

    BUG_TRACKER_URL = "@Launcher_BUG_TRACKER_URL@";
    TRANSLATIONS_URL = "@Launcher_TRANSLATIONS_URL@";
    TRANSLATION_FILES_URL = "@Launcher_TRANSLATION_FILES_URL@";
    MATRIX_URL = "@Launcher_MATRIX_URL@";
    DISCORD_URL = "@Launcher_DISCORD_URL@";
    SUBREDDIT_URL = "@Launcher_SUBREDDIT_URL@";
}

QString Config::versionString() const
{
    return QString("%1.%2.%3").arg(VERSION_MAJOR).arg(VERSION_MINOR).arg(VERSION_PATCH);
}

QString Config::printableVersionString() const
{
    QString vstr = versionString();

    // If the build is not a main release, append the channel
    if (VERSION_CHANNEL != "stable" && GIT_TAG != vstr) {
        vstr += "-" + VERSION_CHANNEL;
    }
    return vstr;
}

QString Config::compilerID() const
{
    if (COMPILER_VERSION.isEmpty())
        return COMPILER_NAME;
    return QStringLiteral("%1 - %2").arg(COMPILER_NAME).arg(COMPILER_VERSION);
}

QString Config::systemID() const
{
    return QStringLiteral("%1 %2 %3").arg(COMPILER_TARGET_SYSTEM, COMPILER_TARGET_SYSTEM_VERSION, COMPILER_TARGET_SYSTEM_PROCESSOR);
}
