using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

[Serializable]
public abstract class MultiDialogueData<T> : IModelMapper<T>
{

    [NonSerialized]
    public string name;

    [NonSerialized]
    public string modelName;

    [SerializeField]
    public string SpeakerName;

    [SerializeField]
    public int CurrentDialogue;

    [SerializeField]
    public List<IndexValuePair<int, DialogueData>> DialogueStepModelDataList = new List<IndexValuePair<int, DialogueData>>();


    #region NotImplemented
    /*
     * we dont want to map it here, we will mark fields in NpcDialogfeManager after each loading and fetching dialogue
     */
    public T MapDataToObject(string prefarbAssetName)
    {
        throw new NotImplementedException();
    }

    public T MapDataToObject()
    {
        throw new NotImplementedException();
    }
    #endregion
}

[Serializable]
public class MultiDialogueData : MultiDialogueData<MultiDialogue>
{
    public MultiDialogueData(MultiDialogue dialogue)
    {
        SpeakerName = dialogue.SpeakerName;

        CurrentDialogue = dialogue.CurrentDialogue;

        DialogueStepModelDataList.Clear();

        foreach(IndexValuePair<int, Dialogue> DialogueStepModelData in dialogue.Dialogues)
        {
            DialogueStepModelDataList.Add(
                new IndexValuePair<int, DialogueData>(
                    DialogueStepModelData.Key,
                    new DialogueData(DialogueStepModelData.Value)
                )
            );
        }
    }
}