using System.IO;
using Stove.StoveSDK;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using UnityEditor.iOS.Xcode.Extensions;
using UnityEngine;

public class XcodeSettingsPostProcesser
{
    [PostProcessBuildAttribute(10)]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject)
    {
        // Stop processing if targe is NOT iOS
        if (buildTarget != BuildTarget.iOS)
            return;

        var instance = StoveSettings.Instance; //:Load

        // Initialize PbxProject
        var projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";

        PBXProject pbxProject = new PBXProject();
        pbxProject.ReadFromFile(projectPath);
#if UNITY_2019_3_OR_NEWER
        string targetGuid = pbxProject.GetUnityMainTargetGuid();
        string frameworkTargetGuid = pbxProject.GetUnityFrameworkTargetGuid();
#else
        string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone");
#endif
        // Sample of update build property

        pbxProject.AddBuildProperty(targetGuid, "HEADER_SEARCH_PATHS", "$(inherited)");
        pbxProject.AddBuildProperty(targetGuid, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");
        pbxProject.AddBuildProperty(targetGuid, "OTHER_CFLAGS", "$(inherited)");
        pbxProject.AddBuildProperty(targetGuid, "OTHER_LDFLAGS", "");
        pbxProject.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");
        pbxProject.SetBuildProperty(targetGuid, "SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD", "NO");
        pbxProject.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)");
        pbxProject.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(SDKROOT)/usr/lib/swift");
        pbxProject.AddBuildProperty(targetGuid, "LIBRARY_SEARCH_PATHS", "$(DEVELOPER_DIR)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/$(PLATFORM_NAME)");
        
        pbxProject.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "/usr/lib/swift");
        pbxProject.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited)");
        pbxProject.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");
        pbxProject.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@loader_path/Frameworks");
        pbxProject.AddBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
        pbxProject.SetBuildProperty(targetGuid, "DEVELOPMENT_TEAM", "J5CXG5LD6A");
        if (StoveSettings.EnableGUID)
        {
            if (StoveSettings.EnableVTCO)
            {
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE", "5077bc86-4ade-4175-b1cf-1cb9cf23a03e");
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_guid_vn_260226");
                PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, "com.stove.mvp.ios.guid.vn");
            }
            else
            {
            pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE", "f04a27b3-b98f-436a-a5a8-b941619e68cc");
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_guid_260107");
                PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, "com.stove.mvp.ios.guid");
            }
        }
        else
        {
            if (StoveSettings.EnableVTCO)
            {
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE", "ddacbb56-2c4c-4999-83a9-0f7a090c5e5d");
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_vn_260226");
                PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, "com.stove.mvp.ios.vn");
            }
            else
            {
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE", "6a1beebd-74be-45b5-b39b-6cd67f3ac70c");
                pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_260107");
                PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, "com.stove.mvp.ios");
            }
        }

#if UNITY_2019_3_OR_NEWER
        pbxProject.SetBuildProperty(frameworkTargetGuid, "ENABLE_BITCODE", "NO");
        pbxProject.SetBuildProperty(frameworkTargetGuid, "SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD", "NO");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "LIBRARY_SEARCH_PATHS", "$(SDKROOT)/usr/lib/swift");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "LIBRARY_SEARCH_PATHS", "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "LIBRARY_SEARCH_PATHS", "$(DEVELOPER_DIR)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/$(PLATFORM_NAME)");
        pbxProject.SetBuildProperty(frameworkTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "/usr/lib/swift");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited)");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "@loader_path/Frameworks");
        pbxProject.AddBuildProperty(frameworkTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
#else

#endif
        pbxProject.AddCapability(targetGuid, PBXCapabilityType.GameCenter);
        pbxProject.AddCapability(targetGuid, PBXCapabilityType.PushNotifications, ProjectSettingsEntitlementsFilePath);
        pbxProject.AddCapability(targetGuid, PBXCapabilityType.KeychainSharing, ProjectSettingsEntitlementsFilePath);

        string buildType = StoveSettings.IOSBuildType;
        if (buildType == "adhoc")
        {
            pbxProject.AddCapability(targetGuid, PBXCapabilityType.SignInWithApple);
            pbxProject.AddCapability(targetGuid, PBXCapabilityType.AppGroups, ProjectSettingsEntitlementsFilePath);

            // Add NotificationServiceExtension Target
            var pathToNotificationService = Path.GetFullPath(NotificationServicePath);
            var notificationServicePlistPath = pathToNotificationService + "Info.plist";
            PlistDocument notificationServicePlist = new PlistDocument();
            notificationServicePlist.ReadFromFile(notificationServicePlistPath);
            notificationServicePlist.root.SetString("CFBundleShortVersionString", "1.0");
            notificationServicePlist.root.SetString("CFBundleVersion", PlayerSettings.iOS.buildNumber.ToString());

            string notificationServiceTarget;
            if (StoveSettings.EnableGUID)
            {
                if (StoveSettings.EnableVTCO)
                {
                    notificationServiceTarget = PBXProjectExtensions.AddAppExtension(pbxProject, targetGuid, "NotificationServiceExtension", "com.stove.mvp.ios.guid.vn.notification", notificationServicePlistPath);
                }
                else
                {  
                    notificationServiceTarget = PBXProjectExtensions.AddAppExtension(pbxProject, targetGuid, "NotificationServiceExtension", "com.stove.mvp.ios.guid.notification", notificationServicePlistPath);
                }
            }
            else
            {
                if (StoveSettings.EnableVTCO)
                {
                    notificationServiceTarget = PBXProjectExtensions.AddAppExtension(pbxProject, targetGuid, "NotificationServiceExtension", "com.stove.mvp.ios.vn.notification", notificationServicePlistPath);
                }
                else
                {
                    notificationServiceTarget = PBXProjectExtensions.AddAppExtension(pbxProject, targetGuid, "NotificationServiceExtension", PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.iOS) + ".notification", notificationServicePlistPath);
                }
            }

            var buildPhaseID = pbxProject.AddSourcesBuildPhase(notificationServiceTarget);
            pbxProject.AddFileToBuildSection(notificationServiceTarget, buildPhaseID, pbxProject.AddFile(pathToNotificationService + "NotificationService.m", "NotificationService/NotificationService.m", PBXSourceTree.Source));

            pbxProject.SetBuildProperty(notificationServiceTarget, "ARCHS", "$(ARCHS_STANDARD)");
            pbxProject.SetBuildProperty(notificationServiceTarget, "DEVELOPMENT_TEAM", "J5CXG5LD6A");
            pbxProject.SetBuildProperty(notificationServiceTarget, "IPHONEOS_DEPLOYMENT_TARGET", "13.0");

            if (StoveSettings.EnableGUID)
            {
                if (StoveSettings.EnableVTCO)
                {
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE", "91fd3013-5e40-40c7-b614-c5f84377d8c2");
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_notification_guid_vn_260226");
                }
                else
                {
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE", "f6626868-e933-4370-bba0-14642da96285");
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_notification_guid_260107");
                }
            }
            else
            {
                if (StoveSettings.EnableVTCO)
                {
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE", "d5a8bf31-f7cd-43be-914b-052cb2f85443");
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_notification_vn_260226");
                }
                else
                {
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE", "7df8a6b2-9a5d-448f-819b-06723c839354");
                    pbxProject.SetBuildProperty(notificationServiceTarget, "PROVISIONING_PROFILE_SPECIFIER", "adhoc_mvp_sdk_notification_260107");
                }
            }

            pbxProject.SetBuildProperty(notificationServiceTarget, "ENABLE_BITCODE", "NO");
            pbxProject.SetBuildProperty(notificationServiceTarget, "SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD", "NO");
            pbxProject.SetBuildProperty(notificationServiceTarget, "CLANG_ENABLE_MODULES", "YES");

            pbxProject.AddBuildProperty(notificationServiceTarget, "LIBRARY_SEARCH_PATHS", "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)");
            pbxProject.AddBuildProperty(notificationServiceTarget, "LIBRARY_SEARCH_PATHS", "$(SDKROOT)/usr/lib/swift");
            pbxProject.AddBuildProperty(notificationServiceTarget, "LIBRARY_SEARCH_PATHS", "$(DEVELOPER_DIR)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/$(PLATFORM_NAME)");
            
            pbxProject.SetBuildProperty(notificationServiceTarget, "LD_RUNPATH_SEARCH_PATHS", "/usr/lib/swift");
            pbxProject.AddBuildProperty(notificationServiceTarget, "LD_RUNPATH_SEARCH_PATHS", "$(inherited)");
            pbxProject.AddBuildProperty(notificationServiceTarget, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");
            pbxProject.AddBuildProperty(notificationServiceTarget, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/../../Frameworks");
            pbxProject.AddBuildProperty(notificationServiceTarget, "LD_RUNPATH_SEARCH_PATHS", "@loader_path/Frameworks");
        }

        // Apply settings
        File.WriteAllText(projectPath, pbxProject.WriteToString());

        if (buildType == "adhoc")
        {
            ProjectCapabilityManager projectCapabilityManager = new ProjectCapabilityManager(projectPath, "NotificationService.entitlements", "NotificationServiceExtension");

            if (StoveSettings.EnableGUID)
            {
                if (StoveSettings.EnableVTCO)
                {
                    projectCapabilityManager.AddAppGroups(new string[] { "group.com.stove.mvp.ios.guid.vn" });
                }
                else
                {
                    projectCapabilityManager.AddAppGroups(new string[] { "group.com.stove.mvp.ios.guid" });
                }
            }
            else
            {
                if (StoveSettings.EnableVTCO)
                {
                    projectCapabilityManager.AddAppGroups(new string[] { "group.com.stove.mvp.ios.vn" });
                }
                else
                {
                    projectCapabilityManager.AddAppGroups(new string[] { "group.com.stove.mvp.ios" });
                }
            }

            projectCapabilityManager.AddKeychainSharing(new string[] { "$(AppIdentifierPrefix)com.stove.globaldata" });
            projectCapabilityManager.WriteToFile();
        }

        string text = System.IO.File.ReadAllText(projectPath);
        //text = text.Replace("DEVELOPMENT_TEAM = \"\"", "DEVELOPMENT_TEAM = \"587KZTG97Q\"");
        text = text.Replace("\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\"", "\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution: Smilegate Stove, Inc. (J5CXG5LD6A)\"");
        text = text.Replace("\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iOS Developer\"", "\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution: Smilegate Stove, Inc. (J5CXG5LD6A)\"");
        text = text.Replace("\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"Apple Development\"", "\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution: Smilegate Stove, Inc. (J5CXG5LD6A)\"");

        System.IO.File.WriteAllText(projectPath, text);

        // Samlpe of editing Info.plist
        var plistPath = Path.Combine(pathToBuiltProject, "Info.plist");
        var plist = new PlistDocument();
        plist.ReadFromFile(plistPath);

        plist.root.SetString("NSCameraUsageDescription", "");
        plist.root.SetString("NSPhotoLibraryUsageDescription", "");
        plist.root.SetString("NSPhotoLibraryAddUsageDescription", "");
        plist.root.SetString("NSMicrophoneUsageDescription", "");
        plist.root.SetString("NSUserTrackingUsageDescription", "");

        var allowsDict = plist.root.CreateDict("NSAppTransportSecurity");
        allowsDict.SetBoolean("NSAllowsArbitraryLoads", true);

        // Add string setting
        plist.root.SetString("StoveEnvironment", StoveSettings.Zone);
        var languages = plist.root.CreateArray("CFBundleLocalizations");
        languages.AddString("ar");
        languages.AddString("cs");
        languages.AddString("de");
        languages.AddString("en");
        languages.AddString("es");
        languages.AddString("fr");
        languages.AddString("id");
        languages.AddString("it");
        languages.AddString("ja");
        languages.AddString("ko");
        languages.AddString("ms");
        languages.AddString("nl");
        languages.AddString("pl");
        languages.AddString("pt");
        languages.AddString("ru");
        languages.AddString("th");
        languages.AddString("tr");
        languages.AddString("zh-Hans");
        languages.AddString("zh-Hant");
        languages.AddString("vi");

        if (StoveSettings.FacebookEnabled)
        {
            plist.root.SetString("FacebookAppID", StoveSettings.FacebookAppId);
            plist.root.SetString("FacebookClientToken", StoveSettings.FacebookClientToken);
        }

        if (StoveSettings.GoogleEnabled)
        {
            plist.root.SetString("GoogleClientID", StoveSettings.GoogleIosClientId);
        }

        if (StoveSettings.NaverEnabled)
        {
            plist.root.SetString("NidClientID", StoveSettings.NaverClientId);
            plist.root.SetString("NidAppName", StoveSettings.NaverClientName);
            plist.root.SetString("NidClientSecret", StoveSettings.NaverClientSecret);
            plist.root.SetString("NidUrlScheme", StoveSettings.NaverUrlScheme);
        }

        if (StoveSettings.SanctionType)
        {
            plist.root.SetInteger("StoveSanctionType", 1);
        }

        // scheme whitelist
        var queriesSchemes = plist.root.CreateArray("LSApplicationQueriesSchemes");
        queriesSchemes.AddString("mstove");

        // Add URL Scheme
        var array = plist.root.CreateArray("CFBundleURLTypes");
        var urlDict = array.AddDict();
        var urlInnerArray = urlDict.CreateArray("CFBundleURLSchemes");

        if (StoveSettings.EnableGUID)
        {
            if (StoveSettings.EnableVTCO)
            {
                urlInnerArray.AddString("com.stove.mvp.ios.guid.vn");
            }
            else
            {   
                urlInnerArray.AddString("com.stove.mvp.ios.guid");
            }
        }
        else
        {
            if (StoveSettings.EnableVTCO)
            {
                urlInnerArray.AddString("com.stove.mvp.ios.vn");
            }
            else
            {
                urlInnerArray.AddString("com.stove.mvp.ios");
            }
        }

        if (StoveSettings.FacebookEnabled)
        {
            urlInnerArray.AddString("fb" + StoveSettings.FacebookAppId);
            queriesSchemes.AddString("fbapi");
            queriesSchemes.AddString("fb-messenger-share-api");
            queriesSchemes.AddString("fbauth2");
            queriesSchemes.AddString("fbshareextension");
        }

        if (StoveSettings.GoogleEnabled)
        {
            urlInnerArray.AddString(StoveSettings.GoogleIosUrlScheme);
        }

        if (StoveSettings.NaverEnabled)
        {
            urlInnerArray.AddString(StoveSettings.NaverUrlScheme);
            queriesSchemes.AddString("naversearchapp");
            queriesSchemes.AddString("naversearchthirdlogin");
        }

        if (StoveSettings.LineEnabled)
        {
            plist.root.SetString("LINE_CHANNEL_ID", StoveSettings.LineChannelId);
            urlInnerArray.AddString("line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)");
            queriesSchemes.AddString("lineauth2");
        }

        // Apply editing settings to Info.plist
        plist.WriteToFile(plistPath);

        foreach (string podFilePath in PodFilePaths)
        {
            if (StoveSettings.EnableGUID)
            {
                CopyAndReplaceFile(podFilePath + "_GUID", Path.Combine(pathToBuiltProject, Path.GetFileName(PodFilePath)));
            }
            else
            {
                CopyAndReplaceFile(podFilePath, Path.Combine(pathToBuiltProject, Path.GetFileName(PodFilePath)));
            }
        }

        // StartPodsProcess(pathToBuiltProject);

        if (StoveSettings.EnableGUID)
        {
            CopyAndReplaceFile(NotificationServiceEntitlementsFilePathForGUID, Path.Combine(pathToBuiltProject, Path.GetFileName(NotificationServiceEntitlementsFilePathForGUID)));
            CopyAndReplaceFile(SDKEntitlementsFilePathForGUID, Path.Combine(pathToBuiltProject, Path.GetFileName(SDKEntitlementsFilePathForGUID)));
        }
        else
        {
            CopyAndReplaceFile(NotificationServiceEntitlementsFilePath, Path.Combine(pathToBuiltProject, Path.GetFileName(NotificationServiceEntitlementsFilePath)));
            CopyAndReplaceFile(SDKEntitlementsFilePath, Path.Combine(pathToBuiltProject, Path.GetFileName(SDKEntitlementsFilePath)));
        }
    }

    internal static void CopyAndReplaceFile(string srcPath, string dstPath)
    {
        if (File.Exists(dstPath))
            File.Delete(dstPath);

        File.Copy(srcPath, dstPath);
    }

    //static void StartPodsProcess(string path)
    //{
    //    var proc = new System.Diagnostics.Process();
    //    proc.StartInfo.FileName = Path.Combine(path, OpenPodsFileName);
    //    proc.Start();
    //}

    static string[] PodFilePaths
    {
        get
        {
            return new[] {
                Path.Combine (PodFolderPath, "Podfile_2021_3")
                //Path.Combine (PodFolderPath, "pods.command"),
                //Path.Combine (PodFolderPath, OpenPodsFileName)
            };
        }
    }

    static string PodFilePath
    {
        get
        {
            return Path.Combine(PodFolderPath, "Podfile");
        }
    }

    //static string OpenPodsFileName
    //{
    //    get
    //    {
    //        return "open_pods.command";
    //    }
    //}

    static string PodFolderPath
    {
        get
        {
            return Path.Combine(XCodeFilesFolderPath, "Pod/");
        }
    }

    static string NotificationServicePath
    {
        get
        {
            return Path.Combine(XCodeFilesFolderPath, "NotificationService/");
        }
    }

    static string ProjectSettingsEntitlementsFilePath
    {
        get
        {
            if (StoveSettings.EnableGUID)
            {
                if (StoveSettings.EnableVTCO)
                {
                    return "${PROJECT_DIR}/StoveSDK_GUID_VN.entitlements";
                }
                else
                {
                    return "${PROJECT_DIR}/StoveSDK_GUID.entitlements";
                }
            }
            else
            {
                if (StoveSettings.EnableVTCO)
                {
                    return "${PROJECT_DIR}/StoveSDK_VN.entitlements";
                }
                else
                {
                    return "${PROJECT_DIR}/StoveSDK.entitlements";
                }
            }
        }
    }

    static string NotificationServiceEntitlementsFilePath
    {
        get
        {
            if (StoveSettings.EnableVTCO)
            {
                return Path.Combine(NotificationServicePath, "NotificationService_VN.entitlements");
            }
            else
            {
                return Path.Combine(NotificationServicePath, "NotificationService.entitlements");
            }
        }
    }

    static string NotificationServiceEntitlementsFilePathForGUID
    {
        get
        {
            if (StoveSettings.EnableVTCO)
            {
                return Path.Combine(NotificationServicePath, "NotificationService_GUID_VN.entitlements");
            }
            else
            {
                return Path.Combine(NotificationServicePath, "NotificationService_GUID.entitlements");
            }
        }
    }

    static string SDKEntitlementsFilePath
    {
        get
        {
            if (StoveSettings.EnableVTCO)
            {
                return Path.Combine(XCodeFilesFolderPath, "StoveSDK_VN.entitlements");
            }
            else
            {
                return Path.Combine(XCodeFilesFolderPath, "StoveSDK.entitlements");
            }
        }
    }

    static string SDKEntitlementsFilePathForGUID
    {
        get
        {
            if (StoveSettings.EnableVTCO)
            {
                return Path.Combine(XCodeFilesFolderPath, "StoveSDK_GUID_VN.entitlements");
            }
            else
            {
                return Path.Combine(XCodeFilesFolderPath, "StoveSDK_GUID.entitlements");
            }
        }
    }

    static string XCodeFilesFolderPath
    {
        get
        {
            return Path.Combine(UnityProjectRootFolder, "Assets/Stove/Sample/Editor/Settings/");
        }
    }

    static string UnityProjectRootFolder
    {
        get
        {
            return ".";
        }
    }
}
