using System.IO;
using UnityEditor;
using UnityEngine;

namespace Woop.Unity.Editor
{
    public static class WoopPrefabMenu
    {
        private const string MenuPath = "Assets/Woop/Create Editable Prefab Copy";

        [MenuItem(MenuPath, true)]
        private static bool CanCreatePrefabCopy()
        {
            string path = AssetDatabase.GetAssetPath(Selection.activeObject);
            return Selection.activeObject is GameObject
                && string.Equals(Path.GetExtension(path), ".woop", System.StringComparison.OrdinalIgnoreCase);
        }

        [MenuItem(MenuPath)]
        private static void CreatePrefabCopy()
        {
            var source = Selection.activeObject as GameObject;
            string sourcePath = AssetDatabase.GetAssetPath(source);
            string directory = Path.GetDirectoryName(sourcePath)?.Replace('\\', '/') ?? "Assets";
            string prefabPath = AssetDatabase.GenerateUniqueAssetPath(
                $"{directory}/{Path.GetFileNameWithoutExtension(sourcePath)}.prefab");

            GameObject instance = Object.Instantiate(source);
            instance.name = source.name;
            GameObject prefab = PrefabUtility.SaveAsPrefabAsset(instance, prefabPath);
            Object.DestroyImmediate(instance);

            Selection.activeObject = prefab;
            EditorGUIUtility.PingObject(prefab);
        }
    }
}
