﻿using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

namespace ARGOEditor
{
    public class BuildWindow : EditorWindow
    {
        private static readonly List<string> AssetsBundlesNames = new List<string>();
        private static readonly List<bool> AssetsBundlesNamesEnable = new List<bool>();
        private static readonly List<GameObject> AssetsBundlesNamesGO = new List<GameObject>();

        private int assetId;
        
        public void Awake()
        {
            AssetsBundlesNamesEnable.Clear();
            AssetsBundlesNames.Clear();
            AssetsBundlesNamesGO.Clear();

            var gameObjects = Selection.gameObjects;
            foreach (var go in gameObjects)
            {
                AssetsBundlesNamesEnable.Add(true);
                AssetsBundlesNames.Add(go.name);
                AssetsBundlesNamesGO.Add(go);
            }
        }

        private void OnGUI()
        {
            GUILayout.Label("ARGO asset ID:", EditorStyles.boldLabel);
            assetId = EditorGUILayout.IntField(assetId);

            GUILayout.Label("Selected Objects:", EditorStyles.boldLabel);
            var i = 0;
            foreach (var name in AssetsBundlesNames)
            {
                AssetsBundlesNamesEnable[i] = EditorGUILayout.Toggle(name, AssetsBundlesNamesEnable[i]);
                i++;
            }

            if (GUILayout.Button("Build"))
            {
                OnBuild();
                Close();
            }
            if (GUILayout.Button("Cancel"))
            {
                Close();
            }
        }

        private static void OnBuild()
        {
            var i = 0;
            var builtGOs = new List<GameObject>();
            foreach (var name in AssetsBundlesNamesEnable)
            {
                if (AssetsBundlesNamesEnable[i])
                    builtGOs.Add(AssetsBundlesNamesGO[i]);
                i++;
            }
            if (builtGOs.Count == 0)
            {
                EditorUtility.DisplayDialog("Error occurred", "No GameObjects selected. You have to select as minimum one GameObject.", "OK");
                return;
            }
            var buildTargets = new List<BuildTarget>() { BuildTarget.Android, BuildTarget.iOS };
            SceneHolder.BuildBundles(buildTargets, builtGOs);
        }
    }
}
