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

[Serializable]
/*[TypeConverter(typeof(KillRequiredSubjectDataTypeConverter))]
*/public class KillRequiredSubjectData : RequiredSubjectData
{
    protected override string MODEL_LOCALIZATION => "Enemies/";

    [SerializeField]
    public int CurrentAmount = 0;


    public KillRequiredSubjectData(int requiredAmount, string requiredObjectName) : base(requiredAmount, requiredObjectName) { }

    public KillRequiredSubjectData(int requiredAmount, string requiredObjectName, int currentAmount) : base(requiredAmount, requiredObjectName)
    { 
        CurrentAmount = currentAmount; 
    }

    public KillRequiredSubjectData(int requiredAmount, int currentAmount) : base(requiredAmount) { CurrentAmount = currentAmount; }


    public KillRequiredSubjectData(KillRequiredSubject requiredSubject) : base(requiredSubject) { CurrentAmount = requiredSubject.CurrentAmount;  }


    public override RequiredSubject MapDataToObject(string prefarbAssetName)
    {
        var newKillRequirement = new KillRequiredSubject(RequiredAmount, CurrentAmount);

        newKillRequirement.RequiredObject = newKillRequirement.FindObjectInResource(prefarbAssetName);

        return newKillRequirement;
    }

    public override RequiredSubject MapDataToObject()
    {
        return new KillRequiredSubject(RequiredAmount, RequiredObjectName, CurrentAmount);
    }
}


/*[TypeConverter(typeof(KillRequiredSubjectDataTypeConverter))]
public class KillRequiredSubjectDataTypeConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return sourceType == typeof(RequiredSubjectData<RequiredSubject>) || base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        var castedFrom = value as RequiredSubjectData<RequiredSubject>;

        return castedFrom != null
            ? new KillRequiredSubjectData(castedFrom.RequiredAmount, castedFrom.RequiredObjectName)
            : base.ConvertFrom(context, culture, value)
        ;
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        var castedTo = value as KillRequiredSubjectData;

        return destinationType == typeof(RequiredSubjectData<RequiredSubject>) && castedTo != null
            ? new RequiredSubjectData<RequiredSubject>(castedTo.RequiredAmount, castedTo.RequiredObjectName)
            : base.ConvertTo(context, culture, value, destinationType)
        ;
    }
}*/