﻿using System.IO;
using JLGames.RocketDriver.CSharp.Utils;
using UnityEditor;
using UnityEngine;
using FileUtil = JLGames.RocketDriver.CSharp.Utils.FileUtil;

namespace JLGames.RocketDriver.Editor.Infra
{
    public static class ExportPackageUtil
    {
        public static void ExportPackage(ExportPackageItem packageItem, bool log = true)
        {
            if (null == packageItem) return;
            var fileDir = packageItem.PackageExprotDir;
            var filePath = packageItem.PackageFilePath;
            if (!packageItem.Interactive) EditorUtility.DisplayProgressBar($"Export Package : \"{packageItem.Name}\"", packageItem.FileName, 0.5f);
            InitPackageDir(fileDir);
            DeletePackage(filePath);
            AssetDatabase.ExportPackage(packageItem.AssetPaths.ToArray(), filePath, packageItem.PackageOptions);
            if (!packageItem.Interactive) EditorUtility.ClearProgressBar();
            if (log) Debug.Log($"Exprot:[{filePath}]");
        }

        public static void ExportPackages(ExportPackageItem[] packageItems, bool log = true)
        {
            if (null == packageItems || packageItems.Length == 0) return;
            foreach (var item in packageItems)
            {
                ExportPackage(item, log);
            }
        }

        public static void ExportPackages(ExportSettings settings, bool all = false, bool log = true)
        {
            ExportPackages(settings.Settings, all, log);
        }

        public static void ExportPackages(ExportSettings settings, string itemName, bool log = true)
        {
            ExportPackages(settings.Settings, itemName, log);
        }

        public static void ExportPackages(ExportPackageSettings settings, bool all = false, bool log = true)
        {
            if (all)
                ExportPackages(settings.Packages, log);
            else
                ExportPackage(settings.MainPackage, log);
        }

        public static void ExportPackages(ExportPackageSettings settings, string itemName, bool log = true)
        {
            ExportPackage(settings.GetPackageItem(itemName), log);
        }

        private static void InitPackageDir(string dir)
        {
            if (Directory.Exists(dir)) return;
            DirectoryUtil.MakeDir(dir);
        }

        private static void DeletePackage(string packagePath)
        {
            FileUtil.DeleteFile(packagePath, true);
        }
    }
}