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

namespace UnityTest
{
    public static class Icons
    {
        const string k_IconsFolderName = "icons";
        private static readonly string k_IconsFolderPath = String.Format("UnityTestTools{0}Common{0}Editor{0}{1}", Path.DirectorySeparatorChar, k_IconsFolderName);

        private static readonly string k_IconsAssetsPath = "";

        public static readonly Texture2D FailImg;
        public static readonly Texture2D IgnoreImg;
        public static readonly Texture2D SuccessImg;
        public static readonly Texture2D UnknownImg;
        public static readonly Texture2D InconclusiveImg;
        public static readonly Texture2D StopwatchImg;

        public static readonly GUIContent GUIUnknownImg;
        public static readonly GUIContent GUIInconclusiveImg;
        public static readonly GUIContent GUIIgnoreImg;
        public static readonly GUIContent GUISuccessImg;
        public static readonly GUIContent GUIFailImg;

        static Icons()
        {
            var dirs = Directory.GetDirectories("Assets", k_IconsFolderName, SearchOption.AllDirectories).Where(s => s.EndsWith(k_IconsFolderPath));
            if (dirs.Any())
                k_IconsAssetsPath = dirs.First();
            else
                Debug.LogWarning("The UnityTestTools asset folder path is incorrect. If you relocated the tools please change the path accordingly (Icons.cs).");

            FailImg = LoadTexture("failed.png");
            IgnoreImg = LoadTexture("ignored.png");
            SuccessImg = LoadTexture("passed.png");
            UnknownImg = LoadTexture("normal.png");
            InconclusiveImg = LoadTexture("inconclusive.png");
            StopwatchImg = LoadTexture("stopwatch.png");

            GUIUnknownImg = new GUIContent(UnknownImg);
            GUIInconclusiveImg = new GUIContent(InconclusiveImg);
            GUIIgnoreImg = new GUIContent(IgnoreImg);
            GUISuccessImg = new GUIContent(SuccessImg);
            GUIFailImg = new GUIContent(FailImg);
        }

        private static Texture2D LoadTexture(string fileName)
        {
            return (Texture2D)AssetDatabase.LoadAssetAtPath(k_IconsAssetsPath + Path.DirectorySeparatorChar + fileName, typeof(Texture2D));
        }
    }
}