namespace UXAssist.Functions;

public static class DysonSphereFunctions
{
    public static StarData CurrentStarForDysonSystem()
    {
        StarData star = null;
        var dysonEditor = UIRoot.instance?.uiGame?.dysonEditor;
        if (dysonEditor != null && dysonEditor.gameObject.activeSelf)
        {
            star = dysonEditor.selection.viewStar;
        }
        return star ?? GameMain.data?.localStar;
    }

    public static void InitCurrentDysonLayer(StarData star, int layerId)
    {
        star ??= CurrentStarForDysonSystem();
        if (star == null) return;
        var dysonSpheres = GameMain.data?.dysonSpheres;
        if (dysonSpheres == null) return;
        var dysonEditor = UIRoot.instance?.uiGame.dysonEditor;
        if (layerId < 0)
        {
            if (dysonSpheres[star.index] == null) return;
            var dysonSphere = new DysonSphere();
            dysonSpheres[star.index] = dysonSphere;
            dysonSphere.Init(GameMain.data, star);
            dysonSphere.ResetNew();

            if (!dysonEditor) return;
            if (dysonEditor.selection.viewStar == star)
            {
                dysonEditor.selection.viewDysonSphere = dysonSphere;
                dysonEditor.selection.NotifyDysonShpereChange();
            }
            return;
        }

        var ds = dysonSpheres[star.index];
        if (ds?.layersIdBased[layerId] == null) return;
        var pool = ds.rocketPool;
        for (var id = ds.rocketCursor - 1; id > 0; id--)
        {
            if (pool[id].id != id) continue;
            if (pool[id].nodeLayerId != layerId) continue;
            ds.RemoveDysonRocket(id);
            break;
        }
        ds.RemoveLayer(layerId);
        if (!dysonEditor) return;
        if (!dysonEditor.IsRender(layerId, false, true))
        {
            dysonEditor.SwitchRenderState(layerId, false, true);
        }
        if (!dysonEditor.IsRender(layerId, false, false))
        {
            dysonEditor.SwitchRenderState(layerId, false, false);
        }
        dysonEditor.selection.ClearAllSelection();
    }
}
