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

namespace UnityEditor.Performance.ProfileAnalyzer
{
    internal class Columns
    {
        int[] m_ColumnWidth = new int[4];

        public Columns(int a, int b, int c, int d)
        {
            SetColumnSizes(a, b, c, d);
        }

        public void SetColumnSizes(int a, int b, int c, int d)
        {
            m_ColumnWidth[0] = a;
            m_ColumnWidth[1] = b;
            m_ColumnWidth[2] = c;
            m_ColumnWidth[3] = d;
        }

        public int GetColumnWidth(int n)
        {
            if (n < 0 || n >= m_ColumnWidth.Length)
                return 0;

            return m_ColumnWidth[n];
        }

        public void Draw(int n, string col)
        {
            if (n < 0 || n >= m_ColumnWidth.Length || m_ColumnWidth[n] <= 0)
                EditorGUILayout.LabelField(col);

            EditorGUILayout.LabelField(col, GUILayout.Width(m_ColumnWidth[n]));
        }

        public void Draw(int n, float value)
        {
            Draw(n, string.Format("{0:f2}", value));
        }

        public void Draw2(string col1, string col2)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, col2);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw2(string label, float value)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, label);
            Draw(1, value);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw3(string col1, string col2, string col3)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, col2);
            Draw(2, col3);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw3(string col1, float value2, float value3)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, value2);
            Draw(2, value3);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw4(string col1, string col2, string col3, string col4)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, col2);
            Draw(2, col3);
            Draw(3, col4);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw4Diff(string col1, float left, float right)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, left);
            Draw(2, right);
            Draw(3, right - left);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw4(string col1, float value2, float value3, float value4)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, value2);
            Draw(2, value3);
            Draw(3, value4);
            EditorGUILayout.EndHorizontal();
        }

        // GUIContent versions
        public void Draw(int n, GUIContent col)
        {
            if (n < 0 || n >= m_ColumnWidth.Length || m_ColumnWidth[n] <= 0)
                EditorGUILayout.LabelField(col);

            EditorGUILayout.LabelField(col, GUILayout.Width(m_ColumnWidth[n]));
        }

        public void Draw2(GUIContent col1, GUIContent col2)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, col2);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw2(GUIContent label, float value)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, label);
            Draw(1, value);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw3(GUIContent col1, GUIContent col2, GUIContent col3)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, col2);
            Draw(2, col3);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw3(GUIContent col1, float value2, float value3)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, value2);
            Draw(2, value3);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw4(GUIContent col1, GUIContent col2, GUIContent col3, GUIContent col4)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, col2);
            Draw(2, col3);
            Draw(3, col4);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw4Diff(GUIContent col1, float left, float right)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, left);
            Draw(2, right);
            Draw(3, right - left);
            EditorGUILayout.EndHorizontal();
        }

        public void Draw4(GUIContent col1, float value2, float value3, float value4)
        {
            EditorGUILayout.BeginHorizontal();
            Draw(0, col1);
            Draw(1, value2);
            Draw(2, value3);
            Draw(3, value4);
            EditorGUILayout.EndHorizontal();
        }
    }
}