using System;
// using System.Collections.Generic;
// using System.IO;
// using UnityEditor;
// using UnityEngine;
//
// namespace GitMerge
// {
//     public class ConflictWatcher
//     {
//         private static FileSystemWatcher watcher;
//         private static FileSystemEventArgs e;
//
//         public ConflictWatcher()
//         {
//             string assetPath = Application.dataPath;
//             watcher = new FileSystemWatcher(assetPath);
//             watcher.IncludeSubdirectories = true;
//             watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
//             watcher.Changed += OnFileChanged;
//             watcher.EnableRaisingEvents = true;
//         }
//
//         public event Action<string> OnConflict;
//
//         private void OnFileChanged(object sender, FileSystemEventArgs _e)
//         {
//             e = _e;
//             EditorApplication.update += CheckWindow;
//         }
//
//         private void CheckWindow()
//         {
//             AssetDatabase.Refresh();
//             EditorApplication.update -= CheckWindow;
//             var path = e.FullPath;
//             var relativePath = "Assets" + path.Substring(Application.dataPath.Length);
//
//             if (!path.EndsWith(".unity") && !path.EndsWith(".prefab")) return;
//             // Found it
//             UnityEngine.Object asset;
//             try
//             {
//                 asset = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(relativePath);
//             }
//             catch (Exception exception)
//             {
//                 Debug.Log(exception);
//                 throw;
//             }
//             Debug.Log("asset" + asset);
//             if (asset != null)
//             {
//                 Debug.Log("Found asset" + asset.GetType());
//                 bool isBroken = asset is BrokenPrefabAsset;
//
//                 // Open merge conflict window
//                 if (isBroken)
//                 {
//                     OnConflict?.Invoke(relativePath);
//                 }
//             }
//         }
//
//         static bool IsOpenForEdit(string[] paths, List<string> outNotEditablePaths, StatusQueryOptions statusQueryOptions)
//         {
//             Debug.Log("IsOpenForEdit:");
//             // TODO: Do locking/unlocking here
//
//             foreach (var path in paths)
//             {
//                 // Check for lock
//                 Debug.Log(path);
//             }
//             return true;
//         }
//     }
// }
