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

namespace RapidIconUIC
{
	public class RapidIconWindow : EditorWindow
	{
		static RapidIconWindow window;

		public AssetList assetList;
		public DraggableSeparator leftSeparator, rightSeparator;
		public AssetGrid assetGrid;
		public IconEditor iconEditor;
		public static bool dontSaveOnExit;

		[MenuItem("Tools/RapidIcon")]
		public static void Init()
		{
			/*--------------------------------------------------------------------------------
			 * Display RapidIcon window
			 *--------------------------------------------------------------------------------*/
			dontSaveOnExit = false;
			window = (RapidIconWindow)GetWindow(typeof(RapidIconWindow), false, "RapidIcon");
			window.minSize = new Vector2(870, 600);
			window.Show();
		}

		private void OnEnable()
		{
			/*--------------------------------------------------------------------------------
			 * Instantiate and initialise window elements
			 * Load data
			 *--------------------------------------------------------------------------------*/
			assetList = new AssetList(Application.dataPath);
			assetList.LoadData();

			leftSeparator = new DraggableSeparator(SeparatorTypes.Vertical);
			leftSeparator.LoadData("RapidIconSepPosLeft", 300);

			rightSeparator = new DraggableSeparator(SeparatorTypes.Vertical);
			rightSeparator.LoadData("RapidIconSepPosRight", 1200);

			assetGrid = new AssetGrid(assetList);

			iconEditor = new IconEditor(assetGrid, window);
			iconEditor.LoadData();

			assetGrid.LoadData();
		}

		private void OnDisable()
		{
			/*--------------------------------------------------------------------------------
			 * Save data
			 *--------------------------------------------------------------------------------*/
			assetList.SaveData();
			leftSeparator.SaveData("RapidIconSepPosLeft");
			rightSeparator.SaveData("RapidIconSepPosRight");
			assetGrid.SaveData();

			if (dontSaveOnExit)
			{
				bool res = EditorUtility.DisplayDialog("Exit Without Save?", "You have selected to exit without saving, are you sure?", "Don't Save", "Save");
				if (res)
					return;
			}

			iconEditor.SaveData();
		}

		void OnGUI()
		{
			if (!window)
				Init();

			/*--------------------------------------------------------------------------------
			 * Draw window elements
			 *--------------------------------------------------------------------------------*/
			GUILayout.BeginHorizontal();
			assetList.Draw(leftSeparator.value, window);
			leftSeparator.Draw(150, rightSeparator.value - 320, window);
			assetGrid.Draw(rightSeparator.value - leftSeparator.value, window);
			rightSeparator.Draw(leftSeparator.value + 320, window.position.width - 400, window);
			iconEditor.Draw(window.position.width - rightSeparator.value, window);
			GUILayout.EndHorizontal();
		}
	}
}