using System;
using System.IO;
using UnityEditor;
using UnityEditor.Build.Reporting;
using UnityEngine;

namespace TyphoonUnitySDK
{
    public class PublishHuaweiHarmony : IPublish
    {
        public void Publish(PublishSetting setting)
        {
#if TUANJIE_1_6_OR_NEWER
            PublishResult result = new PublishResult();
            var path = string.IsNullOrEmpty(setting.PackageName)
                ? $".typhoonoutput/harmony_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}"
                : $".typhoonoutput/{setting.PackageName}_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}";
            BuildPlayerOptions buildOptions = new BuildPlayerOptions();
            buildOptions.scenes = EditorBuildSettingsScene.GetActiveSceneList(EditorBuildSettings.scenes);
            buildOptions.locationPathName = path;
            buildOptions.target = BuildTarget.OpenHarmony;
            buildOptions.options = BuildOptions.None;
            PublishTool.InvokeOnPublishStart(setting);
            UniEditor.CreateDirIfNotExist(Path.GetDirectoryName(path));
            //导出前执行
            var report =
                BuildPipeline.BuildPlayer(buildOptions);
            var tuanjieLib = $"{path}/tuanjieLib";
            if (!Directory.Exists(tuanjieLib))
            {
                result.IsSuccess = false;
                UniEditor.ShowMessageBox(
                    "发布失败!\n请检查是否开启了 file -> build settings -> open harmony -> export project\n'export project type' 选择 'Use As A Library'",
                    null);
            }
            else
            {
                if (report.summary.result != BuildResult.Succeeded)
                {
                    Debug.LogError($"发布失败!");
                    result.IsSuccess = false;
                }
                else
                {
                    EditorUtility.RevealInFinder(path);
                    result.IsSuccess = true;
                    //发布成功
                }
            }

            if (Directory.Exists(tuanjieLib))
            {
                {
                    var ohPackageJson5 = $"{path}/entry/oh-package.json5";
                    //引入库
                    Debug.Log($"调整{ohPackageJson5},引入库bee_union_sdk.har");
                    var pattern = "\"tuanjieLib\": \"file:../tuanjieLib\"";
                    var txt = File.ReadAllText(ohPackageJson5);
                    txt = txt.Replace(pattern,
                        "\"tuanjieLib\": \"file:../tuanjieLib\",\n    \"bee_union_sdk\":\"file:../tuanjieLib/libs/arm64-v8a/bee_union_sdk.har\"");
                    File.WriteAllText(ohPackageJson5, txt);
                }
                //生成自定义TuanjiePlayerAbility
                {
                    var abilityEts =
                        $"{path}\\entry\\src\\main\\ets\\ability\\TuanjiePlayerAbility.ets";
                    var abilityEtsTemplate =
                        "Assets/Typhoon_Gen/TyphoonSDK/Runtime/HuaweiHarmony/Editor/TuanjiePlayerAbility.template";
                    Debug.Log($"生成-->{abilityEts}");
                    File.Copy(abilityEtsTemplate, abilityEts, true);
                }
                Debug.Log($"发布成功！path:{path}");
            }

            PublishTool.InvokeOnPublishEnd(setting, result);
#endif
        }
    }
}