//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using UnityEditor;
//using UnityEngine;

//namespace XGame.Editor.Build.AssetBundles
//{
//    internal class BundleGroupController
//    {
//        private BundleContext _context;
//        public BundleGroupController(BundleContext context)
//        {
//            _context = context;
//        }
//        /// <summary>
//        /// 根据分组配置重新设置bundleName
//        /// TODO: 多语言的Assetbundle分包也需要调整到设置
//        /// </summary>
//        public void ModifyBundleNameByGroup()
//        {
//            ModifyBundleNameByGroup(CollectBundleGroupNames());
//        }
//        /// <summary>
//        /// 收集Assetbundle分组的GroupName
//        /// <key: assetPath, value: groupName>
//        /// </summary>
//        /// <param name="guidToAddressableName"></param>
//        /// <returns></returns>
//        private Dictionary<string, string> CollectBundleGroupNames()
//        {
//            var groupNameMap = new Dictionary<string, string>();
//            var packerManifest = ABPackerInfoManifest.Load();
//            if (packerManifest == null || packerManifest.GroupInfos == null || packerManifest.GroupInfos.Count < 1)
//            {
//                return groupNameMap;
//            }
//            foreach (var groupInfo in packerManifest.GroupInfos)
//            {
//                var groupName = groupInfo.groupName;
//                if (string.IsNullOrEmpty(groupName) || FileUtil.HasChinese(groupName))
//                {
//                    Debug.LogWarning($"[XBuild]AssetbundleGroup 名字为空或者包含中文字符. ID:{groupInfo.GroupId}");
//                    continue;
//                }
//                if (Framework.i18n.LanguageUtils.IsLanguage(groupName))
//                {
//                    Debug.LogWarning($"[XBuild]AssetbundleGroup 名字不能为多语言枚举. GroupName:{groupName}");
//                    continue;
//                }
//                groupName = groupName.ToLower();
//                foreach (var guid in groupInfo.guidList)
//                {
//                    if (string.IsNullOrEmpty(guid))
//                    {
//                        continue;
//                    }
//                    var assetPath = AssetDatabase.GUIDToAssetPath(guid);
//                    if (!assetPath.StartsWith(PathDefine.ResAddressableRelative))
//                    {
//                        Debug.LogWarning($"[XBuild]AssetbundleGroup 路径错误. GroupName:{groupName} assetPath:{assetPath}");
//                        continue;
//                    }
//                    if (Directory.Exists(assetPath))
//                    {
//                        //是文件夹
//                        var filePaths = FileUtil.FindFiles(assetPath);
//                        foreach (var filePath in filePaths)
//                        {
//                            AddGroupItem(filePath, groupName, groupNameMap);
//                        }
//                        continue;
//                    }
//                    AddGroupItem(assetPath, groupName, groupNameMap);
//                }
//            }
//            Debug.Log($"CollectBundleGroupNames Count:{groupNameMap.Count}");
//            return groupNameMap;
//        }
//        private void AddGroupItem(string assetPath, string groupName, Dictionary<string, string> groupNameMap)
//        {
//            if (!_context.TryGetAddressableNameByPath(assetPath, out var addressableName))
//            {
//                return;
//            }
//            if (groupNameMap.ContainsKey(assetPath))
//            {
//                return;
//            }
//            //Debug.Log($"[XBuild]AddGroupItem addressableName:{addressableName} groupName:{groupName}");
//            groupNameMap.Add(assetPath, groupName);
//        }
//        /// <summary>
//        /// 根据分组配置重新设置bundleName
//        /// TODO: 多语言的Assetbundle分包也需要调整到设置
//        /// </summary>
//        /// <param name="bundleBuilds"></param>
//        /// <param name="groupNameMap"></param>
//        private void ModifyBundleNameByGroup(Dictionary<string, string> groupNameMap)
//        {
//            if (groupNameMap == null || groupNameMap.Count == 0)
//                return;
//            var builds = _context.bundleBuildMap.Values.ToArray();
//            foreach (var build in builds)
//            {
//                if (TryGetGroupName(build.assetNames, groupNameMap, out var groupName))
//                {
//                    var buildCopy = build;
//                    buildCopy.assetBundleName = $"{groupName}/{build.assetBundleName}";
//                    _context.bundleBuildMap[buildCopy.bundleId] = buildCopy;
//                }
//            }
//        }
//        private bool TryGetGroupName(string[] assetNames, Dictionary<string, string> groupNameMap, out string groupName)
//        {
//            foreach (var assetName in assetNames)
//            {
//                if (groupNameMap.ContainsKey(assetName))
//                {
//                    groupName = groupNameMap[assetName];
//                    return true;
//                }
//            }
//            groupName = string.Empty;
//            return false;
//        }

//    }
//}
