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

[Serializable]
public abstract class DialogueData<T> : IModelMapper<T>
{
    [SerializeField]
    public int CurrentStep;

    [SerializeField]
    public List<DialogueStepData> DialogueStepModelDataList = new List<DialogueStepData>();


    #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 DialogueData : DialogueData<Dialogue>
{

    /// <summary>
    /// build Data model based on Object
    /// </summary>
    /// <param name="dialogue"></param>
    public DialogueData(Dialogue dialogue)
    {
        CurrentStep = dialogue.CurrentStep;

        DialogueStepModelDataList.Clear();

        foreach(DialogueStepModel dialogueStepModelData in dialogue.DialogueSteps)
        {
            /* 
             * pass WasDisplayed value from model to data representative class
             */
            DialogueStepModelDataList.Add(new DialogueStepData(dialogueStepModelData.WasDisplayed));
        }
    }
}