﻿#region Header

// Copyright (c) 2021-2022 AccelByte Inc. All Rights Reserved.
// This is licensed software from AccelByte Inc, for limitations
// and restrictions contact your company contract manager.

#endregion

using System.IO;
using System.Text;
using UnityEngine;

namespace BlackBox
{
    public class ConfigIniTemplate
    {
        public const string BLACKBOX_SETTINGS = "BlackBoxSettings";
        public const string RECORDER_SETTINGS = "recorder";

        #region Keys

        public const string GAME_VERSION_ID_FIELD = "GameVersionID";
        public const string NAMESPACE_FIELD = "Namespace";
        public const string API_KEY_FIELD = "APIKey";
        public const string BUILD_ID_FIELD = "BuildID";
        public const string BASE_URL_FIELD = "BaseUrl";
        public const string ISSUE_REPORTER_KEY_FIELD = "IssueReporterHotkey";
        public const string ENABLE_ISSUE_REPORTER_FIELD = "EnableIssueReporter";
        public const string INCLUDE_GAME_LOG_IN_ISSUE_REPORT_FIELD = "IncludeGameLogInIssueReport";
        public const string STORE_HARDWARE_INFO = "EnableHardwareInformationGathering";
        public const string FPS_FIELD = "fps";
        public const string KPS_FIELD = "kps";
        public const string STORE_VIDEO_FIELD = "store_video";
        public const string TOTAL_SECONDS_FIELD = "total_seconds";
        public const string SUB_TYPE_FIELD = "sub_type";
        public const string IS_AUTO_INITIALIZE = "IsAutoInitialize";
        public const string ENABLE_LOGS = "EnableLogs";
        public const string ENABLE_BASIC_PROFILING = "EnableBasicProfiling";
        public const string ENABLE_CRASH_REPORTER = "EnableCrashReporter";

        #endregion Keys

        #region Indices

        public const int GAME_VERSION_ID = 1;
        public const int NAMESPACE = 2;
        public const int API_KEY = 3;
        public const int BUILD_ID = 4;
        public const int BASE_URL = 5;

        public const int FPS = 8;
        public const int KPS = 9;
        public const int STORE_VIDEO = 10;
        public const int TOTAL_SECONDS = 11;
        public const int SUB_TYPE = 12;

        #endregion Indices

        #region File Template

        public static readonly string[] Template = {
            "[BlackBoxSettings]",
            "{0} = {1}",            // Game Version Id : 1
            "{0} = {1}",            // Namespace : 2
            "{0} = {1}",            // Api Key : 3
            "{0} = {1}",            // Build Id : 4
            "{0} = {1}",            // Base Url : 5
            "",
            "[recorder]",
            "{0} = {1}",            // Fps : 8
            "{0} = {1}",            // Kps : 9
            "{0} = {1}",            // Store Video : 10
            "{0} = {1}",            // Total Seconds : 11
            "{0} = {1}",            // Sub Type : 12
        };

        #endregion File Template

        #region Properties

        public string GameVersionId = "Enter your Build ID";
        public string Namespace = "Enter your namespace";
        public string ApiKey = "Enter API key from your game";
        public string BuildId = "Enter your Build ID";
        public string BaseUrl = "https://blackbox.accelbyte.io";

        public int Fps = 5;
        public int Kps = 5;
        public int StoreVideo = 1;
        public int TotalSeconds = 10;
        public string Subtype = "key_name";

        #endregion Properties

        #region Generation

        public void Generate()
        {
            string sourceIniFile = Path.Combine(Application.dataPath, "Plugins/BlackBoxUnitySDK/StreamingAssets/BlackBox/BlackBox.ini");
            string destinationFolder = Path.Combine(Application.dataPath, "StreamingAssets/BlackBox");
            string destinationIniFile = Path.Combine(destinationFolder, "BlackBox.ini");

            if (!File.Exists(destinationIniFile))
            {
                try
                {
                    if (!Directory.Exists(destinationFolder))
                        Directory.CreateDirectory(destinationFolder);

                    File.Copy(sourceIniFile, destinationIniFile);
                    Logger.Log($"Copied BlackBox.ini from: {sourceIniFile} to: {destinationIniFile}");
                }
                catch (System.Exception ex)
                {
                    Logger.LogError($"Failed to copy BlackBox.ini: {ex.Message}");
                }
            }
            else
            {
                Logger.Log("Skipping copy BlackBox.ini: Already exists at " + destinationIniFile);
            }
        }

        #endregion Generation 
    }
}
