using System;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "DataContainerGadgetCollection", menuName = "ScriptableObjects/Spawn DataContainerGadgetCollection", order = 1)]
public class DataContainerGadgetCollection : ScriptableObject, ISerializationCallbackReceiver
{
    public Material[] Materials;
    public Sprite[] ButtonSprites;
    public string[] GadgetNames;


    public Dictionary<Gadget.GadgetIDs, DataContainerGadgetInit> DataContainerGadgetDict = new();
    [SerializeField]
    private List<Gadget.GadgetIDs> GadgetType = new();
    [SerializeField]
    private List<DataContainerGadgetInit> GadgetData = new();

    public void OnBeforeSerialize()
    {
        var keys = DataContainerGadgetDict.Keys.ToArray();
        var vals = DataContainerGadgetDict.Values.ToArray();

        for (int i = 0; i < keys.Length; i++)
        {
            if (GadgetType.Count <= i) GadgetType.Add(keys[i]);
            else GadgetType[i] = keys[i];

            if (GadgetData.Count <= i) GadgetData.Add(vals[i]);
            else GadgetData[i] = vals[i];
        }
    }

    public void OnAfterDeserialize()
    {
        DataContainerGadgetDict = new();
        for (int i = 0; i != Math.Min(GadgetType.Count, GadgetData.Count); i++)
            if (GadgetData[i] != null)
                DataContainerGadgetDict.Add(GadgetType[i], GadgetData[i]);
    }
}