using UnityEngine;

namespace AlterchaseSDK
{
    public abstract class ModAsset : ScriptableObject
    {
        [Header("Mod Asset Info")]
        [SerializeField] protected AlterchaseBarcode assetID;
        [SerializeField] protected string assetName;
        [TextArea(3, 10)]
        [SerializeField] protected string description;
        [SerializeField] protected Texture2D thumbnail;
        [SerializeField] protected string creatorName;
        [SerializeField] protected string version = "1.0.0";

        public AlterchaseBarcode AssetID => assetID;
        public string AssetName => assetName;
        public string Description => description;
        public Texture2D Thumbnail => thumbnail;
        public string CreatorName => creatorName;
        public string Version => version;

        public virtual void OnValidate()
        {
            if (!assetID.IsValid())
            {
                assetID = AlterchaseBarcode.GenerateBarcode();
            }
        }

        public abstract ModAssetType GetAssetType();
        public abstract bool ValidateAsset(out string errorMessage);
    }

    public enum ModAssetType
    {
        Level,
        Model,
        Enemy
    }
}
