// AUTHORED SHIM (not copied). UnityEngine static-class surface (prefs, physics, IMGUI,
// device info, rendering) referenced by tangentially-copied engine code (settings,
// post-processing, raycast UI, device fingerprinting). All cosmetic / off the battle
// path; every member is a no-op returning a safe default.
using System;

namespace UnityEngine
{
    public enum CursorLockMode { None, Locked, Confined }

    public static class Gizmos
    {
        public static Color color { get; set; }
        public static void DrawLine(Vector3 from, Vector3 to) { }
    }
    public static class Physics2D
    {
        public static RaycastHit2D GetRayIntersection(Ray ray, float distance = Mathf.Infinity) => default;
        public static RaycastHit2D GetRayIntersection(Ray ray, float distance, int layerMask) => default;
        public static Collider2D OverlapPoint(Vector2 point, int layerMask) => null;
        public static Collider2D[] OverlapPointAll(Vector2 point, int layerMask) => Array.Empty<Collider2D>();
    }
    public static class Caching
    {
        public static bool ready => true;
        public static bool ClearCache() => true;
    }
    public static class GUIUtility { public static string systemCopyBuffer { get; set; } }
    public static class Cursor
    {
        public static CursorLockMode lockState { get; set; }
        public static bool visible { get; set; }
    }
    public static class ColorUtility
    {
        public static bool TryParseHtmlString(string htmlString, out Color color) { color = default; return false; }
    }
    public static class ScreenCapture { public static void CaptureScreenshot(string filename) { } }
    public static class RenderSettings { public static bool fog { get; set; } }
    public static class JsonUtility
    {
        public static T FromJson<T>(string json) => default!;
        public static object FromJson(string json, Type type) => null;
        public static string ToJson(object obj) => "";
        public static string ToJson(object obj, bool prettyPrint) => "";
        public static void FromJsonOverwrite(string json, object objectToOverwrite) { }
    }
    public static class Social
    {
        public static UnityEngine.SocialPlatforms.ILocalUser localUser => null;
        public static void ReportProgress(string achievementID, double progress, Action<bool> callback) { }
        public static void LoadAchievements(Action<UnityEngine.SocialPlatforms.IAchievement[]> callback) { }
        public static void LoadAchievementDescriptions(Action<UnityEngine.SocialPlatforms.IAchievementDescription[]> callback) { }
        public static void ShowAchievementsUI() { }
    }

    public static class PlayerPrefs
    {
        public static void DeleteAll() { }
        public static void DeleteKey(string key) { }
        public static bool HasKey(string key) => false;
        public static void Save() { }
        public static float GetFloat(string key, float defaultValue = 0f) => defaultValue;
        public static int GetInt(string key, int defaultValue = 0) => defaultValue;
        public static string GetString(string key, string defaultValue = "") => defaultValue;
        public static void SetFloat(string key, float value) { }
        public static void SetInt(string key, int value) { }
        public static void SetString(string key, string value) { }
    }

    public static class Physics
    {
        public static Vector3 gravity { get; set; }
        public static bool Raycast(Ray ray, out RaycastHit hit, float maxDistance = float.PositiveInfinity, int layerMask = -1)
        { hit = default; return false; }
        public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit, float maxDistance = float.PositiveInfinity, int layerMask = -1)
        { hit = default; return false; }
        public static RaycastHit[] RaycastAll(Ray ray, float maxDistance = float.PositiveInfinity, int layerMask = -1)
            => Array.Empty<RaycastHit>();
        public static RaycastHit[] RaycastAll(Vector3 origin, Vector3 direction, float maxDistance = float.PositiveInfinity, int layerMask = -1)
            => Array.Empty<RaycastHit>();
    }

    public static class GUI
    {
        public static Color color { get; set; }
        public static void Label(Rect position, string text) { }
    }

    public static class SystemInfo
    {
        public static string deviceModel => "";
        public static string deviceName => "";
        public static string deviceUniqueIdentifier => "";
        public static string operatingSystem => "";
        public static string graphicsDeviceName => "";
        public static string graphicsDeviceVersion => "";
        public static int graphicsShaderLevel => 0;
        public static int graphicsMemorySize => 0;
        public static int systemMemorySize => 0;
        public static int processorCount => 1;
        public static string processorType => "";
        public static bool SupportsRenderTextureFormat(RenderTextureFormat format) => true;
        public static bool SupportsTextureFormat(TextureFormat format) => true;
        public static bool IsFormatSupported(Experimental.Rendering.GraphicsFormat format, Experimental.Rendering.FormatUsage usage) => true;
    }

    public static class Graphics
    {
        public static void Blit(Texture source, RenderTexture dest) { }
        public static void Blit(Texture source, RenderTexture dest, Material mat) { }
        public static void Blit(Texture source, RenderTexture dest, Material mat, int pass) { }
    }

    public static class QualitySettings
    {
        public static ColorSpace activeColorSpace => ColorSpace.Linear;
        public static int vSyncCount { get; set; }
    }

    public static class StackTraceUtility
    {
        public static string ExtractStackTrace() => "";
    }

    public enum ColorSpace { Uninitialized = -1, Gamma = 0, Linear = 1 }

    public enum RenderTextureReadWrite { Default, Linear, sRGB }

    public enum TextureFormat
    {
        Alpha8, ARGB4444, RGB24, RGBA32, ARGB32, RGB565, R16, DXT1, DXT5,
        RGBA4444, BGRA32, RHalf, RGHalf, RGBAHalf, RFloat, RGFloat, RGBAFloat,
        ARGB64, ASTC_6x6, ETC2_RGB, ETC2_RGBA8, ETC_RGB4, PVRTC_RGB4
    }

    [Flags]
    public enum EventModifiers
    {
        None = 0, Shift = 1, Control = 2, Alt = 4, Command = 8,
        Numeric = 16, CapsLock = 32, FunctionKey = 64
    }
}

namespace UnityEngine.Experimental.Rendering
{
    public enum GraphicsFormat { None, R8G8B8A8_UNorm, R16G16B16A16_SFloat, R32G32B32A32_SFloat, D32_SFloat }
    [Flags]
    public enum FormatUsage { Sample = 1, Linear = 2, Sparse = 4, Render = 8, Blend = 16, MSAA2x = 32 }
    public static class GraphicsFormatUtility
    {
        public static GraphicsFormat GetGraphicsFormat(RenderTextureFormat format, RenderTextureReadWrite readWrite) => GraphicsFormat.None;
        public static GraphicsFormat GetGraphicsFormat(TextureFormat format, bool isSRGB) => GraphicsFormat.None;
    }
}
