/*
<copyright file="BGGCFileBasedA.cs" company="BansheeGz">
    Copyright (c) 2018-2021 All Rights Reserved
</copyright>
*/


using System.IO;
using GameCreator.Core;
using GameCreator.Variables;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;

#endif

namespace BansheeGz.BGDatabase
{
    /// <summary>
    /// Action, based on the file in persistent folder
    /// </summary>
    public abstract class BGGCFileBasedA : BGGCAction
    {
        [SerializeField] [HideInInspector] private bool useVarForFileName;
        [SerializeField] [HideInInspector] private string fileName;

        [VariableFilter(Variable.DataType.String)]
        public VariableProperty fileNameVar;

        protected abstract string FileExt { get; }
        
        public string GetPath(GameObject target)
        {
            string realFileName = null;
            if (useVarForFileName)
            {
                if (fileNameVar == null) return null;

                realFileName = (string) fileNameVar.Get(target);
            }
            else realFileName = fileName;

            if (string.IsNullOrEmpty(realFileName)) return null;

            var path = Path.Combine(Application.persistentDataPath, realFileName);
            if (FileExt != null) path = Path.ChangeExtension(path, FileExt);
            return path;
        }

        // +--------------------------------------------------------------------------------------+
        // | EDITOR                                                                               |
        // +--------------------------------------------------------------------------------------+

#if UNITY_EDITOR
        public override void EditorGui()
        {
            base.EditorGui();
            EditorGUILayout.PropertyField(Prop(nameof(useVarForFileName)));
            EditorGUILayout.PropertyField(Prop(useVarForFileName ? nameof(fileNameVar) : nameof(fileName)));
        }
#endif
    }
}