// SPDX-License-Identifier: GPL-3.0-only
/*
 *  PolyMC - 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 "BuildConfig.h"
#include <QObject>

const Config BuildConfig;

Config::Config()
{
    // Name and copyright
    LAUNCHER_NAME = "@Launcher_Name@";
    LAUNCHER_DISPLAYNAME = "@Launcher_DisplayName@";
    LAUNCHER_COPYRIGHT = "@Launcher_Copyright@";
    LAUNCHER_DOMAIN = "@Launcher_Domain@";
    LAUNCHER_CONFIGFILE = "@Launcher_ConfigFile@";
    LAUNCHER_GIT = "@Launcher_Git@";
    LAUNCHER_DESKTOPFILENAME = "@Launcher_DesktopFileName@";

    USER_AGENT = "@Launcher_UserAgent@";
    USER_AGENT_UNCACHED = USER_AGENT + " (Uncached)";

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

    BUILD_PLATFORM = "@Launcher_BUILD_PLATFORM@";
    BUILD_DATE = "@Launcher_BUILD_TIMESTAMP@";
    UPDATER_BASE = "@Launcher_UPDATER_BASE@";

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

    if (BUILD_PLATFORM == "macOS" && !MAC_SPARKLE_PUB_KEY.isEmpty() && !MAC_SPARKLE_APPCAST_URL.isEmpty())
    {
        UPDATER_ENABLED = true;
    }

    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 = "refs/heads/stable";
        GIT_TAG = versionString();
    }

    if (GIT_REFSPEC.startsWith("refs/heads/"))
    {
        VERSION_CHANNEL = GIT_REFSPEC;
        VERSION_CHANNEL.remove("refs/heads/");
        if(!UPDATER_BASE.isEmpty() && !BUILD_PLATFORM.isEmpty()) {
            UPDATER_ENABLED = true;
        }
    }
    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@";
    HELP_URL = "@Launcher_HELP_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@";

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

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

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;
}