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

[Serializable]
//abstract - changed for Unity Inspector visualisation requirements
public class MissionConditionData : IModelMapper<MissionCondition> 
{
    [SerializeField]
    public MissionTypeEnum Type;

    [SerializeField]
    public List<RequiredSubjectData> RequiredElements = new List<RequiredSubjectData>();

    /// <summary>
    /// Constructor implemented to create object in children classes in main purpose
    /// 
    /// We DON'T implement 'RequiredElements' list here because its MUST be FILLED by objects in specific subtyped (not base one) !!! 
    /// </summary>
    /// <param name="type"></param>
    protected MissionConditionData(MissionTypeEnum type)
    {
        Type = type;
    }

    // abstract
    public virtual MissionCondition MapDataToObject(string prefarbAssetName) { return new MissionCondition(Type); }

    // abstract
    public virtual MissionCondition MapDataToObject() { return new MissionCondition(Type); }

    /// <summary>
    /// Function copied from MissionCondition::Build()
    /// </summary>
    //public abstract MissionConditionData<T, V, E> Build(T missionCondition);
    //
    
    public static MissionConditionData Build(MissionCondition missionCondition)
    {
        switch (missionCondition.Type)
        {
            case MissionTypeEnum.Kill:
                {
                    Debug.Log("Build - KillMissionCondionData");

                    return new KillMissionConditionData(missionCondition);
                }
            case MissionTypeEnum.Collect:
                {
                    Debug.Log("Build - CollectMissionConditionData");

                    return new CollectMissionConditionData(missionCondition);
                }
            default:
                {
                    throw new NotImplementedException("Mission Collection data - constructor");
                }
        }
    }
}