using System;

namespace FrameDoctor.Editor
{
    // Texture asset information for analysis.
    [Serializable]
    public class TextureAssetInfo
    {
        public string Name { get; set; }
        public string AssetPath { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public string Format { get; set; }
        public long MemoryBytes { get; set; }
        public bool HasMipmaps { get; set; }
        public bool ReadWriteEnabled { get; set; }
        public string FilterMode { get; set; }
        public string WrapMode { get; set; }
        public int AnisoLevel { get; set; }
        public bool IsRenderTexture { get; set; }
    }

    // Mesh asset information for analysis.
    [Serializable]
    public class MeshAssetInfo
    {
        public string Name { get; set; }
        public string AssetPath { get; set; }
        public int VertexCount { get; set; }
        public int TriangleCount { get; set; }
        public int SubMeshCount { get; set; }
        public long MemoryBytes { get; set; }
        public bool ReadWriteEnabled { get; set; }
        public string BoundsSize { get; set; }
        public bool HasNormals { get; set; }
        public bool HasTangents { get; set; }
        public bool HasUV { get; set; }
        public bool HasColors { get; set; }
    }

    // Material asset information for analysis.
    [Serializable]
    public class MaterialAssetInfo
    {
        public string Name { get; set; }
        public string AssetPath { get; set; }
        public string ShaderName { get; set; }
        public int RenderQueue { get; set; }
        public bool GpuInstancingEnabled { get; set; }
        public int PassCount { get; set; }
        public string[] TexturePropertyNames { get; set; }
        public int TextureCount { get; set; }
    }

    // Audio clip information for analysis.
    [Serializable]
    public class AudioAssetInfo
    {
        public string Name { get; set; }
        public string AssetPath { get; set; }
        public float DurationSeconds { get; set; }
        public int Channels { get; set; }
        public int Frequency { get; set; }
        public long MemoryBytes { get; set; }
        public string LoadType { get; set; }
        public string CompressionFormat { get; set; }
        public bool LoadInBackground { get; set; }
        public bool Preload { get; set; }
    }

    // Shader information for analysis.
    [Serializable]
    public class ShaderAssetInfo
    {
        public string Name { get; set; }
        public int PassCount { get; set; }
        public bool IsSupported { get; set; }
        public int RenderQueue { get; set; }
        public int PropertyCount { get; set; }
    }

    // GameObject in scene for analysis.
    [Serializable]
    public class SceneObjectInfo
    {
        public string Name { get; set; }
        public string Path { get; set; }
        public bool IsStatic { get; set; }
        public bool IsActive { get; set; }
        public string Layer { get; set; }
        public int ComponentCount { get; set; }
        public string[] ComponentTypes { get; set; }
        public bool HasRenderer { get; set; }
        public bool HasCollider { get; set; }
        public bool HasRigidbody { get; set; }
        public string MeshName { get; set; }
        public string MaterialName { get; set; }
    }

    // Camera information for analysis.
    [Serializable]
    public class CameraInfo
    {
        public string Name { get; set; }
        public bool IsActive { get; set; }
        public float Depth { get; set; }
        public string ClearFlags { get; set; }
        public string RenderingPath { get; set; }
        public float FieldOfView { get; set; }
        public float NearClip { get; set; }
        public float FarClip { get; set; }
        public bool UseOcclusionCulling { get; set; }
        public int CullingMask { get; set; }
        public int TargetDisplay { get; set; }
    }

    // Light information for analysis.
    [Serializable]
    public class LightInfo
    {
        public string Name { get; set; }
        public string Type { get; set; }
        public bool IsActive { get; set; }
        public string ShadowType { get; set; }
        public float Intensity { get; set; }
        public float Range { get; set; }
        public string RenderMode { get; set; }
    }
}
