#if UNITY_EDITOR

using Innoactive.AccessControl;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;

public class AccessControlIntegrityPreprocessor : IPreprocessBuildWithReport
{
    public int callbackOrder => 0;

    public void OnPreprocessBuild(BuildReport report)
    {
        SetupIntegrityParameters();

        if (report.summary.platform == BuildTarget.StandaloneWindows)
        {
            CheckDotNetVersion();
        }
    }

    private static void SetupIntegrityParameters()
    {
        AccessControlIntegrityParameters integrityParameters = AccessControlIntegrity.GetAccessControlIntegrityParameters();
        integrityParameters.sha256Hash = AccessControlIntegrity.GetLibrarySHA256Hash();
        EditorUtility.SetDirty(integrityParameters);
        AssetDatabase.SaveAssets();
    }

    private void CheckDotNetVersion()
    {
        var compatibilityLevel = PlayerSettings.GetApiCompatibilityLevel(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));

        if (compatibilityLevel != ApiCompatibilityLevel.NET_4_6)
        {
            throw new BuildFailedException("Innoactive Access Control Plugin requires .NET 4.x support. " +
                "Please change your Api Compatibility Level accordingly.");
        }
    }
}

#endif
