using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Unity.VisualScripting.FullSerializer;
using UnityEngine;

namespace Unity.VisualScripting
{
    public sealed class FakeSerializationCloner : ReflectedCloner
    {
        public fsConfig config { get; set; } = new fsConfig();

        public override void BeforeClone(Type type, object original)
        {
            (original as ISerializationCallbackReceiver)?.OnBeforeSerialize();
        }

        public override void AfterClone(Type type, object clone)
        {
            (clone as ISerializationCallbackReceiver)?.OnAfterDeserialize();
        }

        protected override IEnumerable<MemberInfo> GetMembers(Type type)
        {
            return fsMetaType.Get(config, type).Properties.Select(p => p._memberInfo);
        }
    }
}