using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEditor;
using UnityEditor.Experimental.GraphView;

namespace UnityEditor.ShaderGraph.Drawing
{
    class BlackboardViewModel : ISGViewModel
    {
        public GraphData model { get; set; }
        public VisualElement parentView { get; set; }
        public string title { get; set; }
        public string subtitle { get; set; }
        public Dictionary<string, IGraphDataAction> propertyNameToAddActionMap { get; set; }
        public Dictionary<string, IGraphDataAction> defaultKeywordNameToAddActionMap { get; set; }
        public Dictionary<string, IGraphDataAction> builtInKeywordNameToAddActionMap { get; set; }
        public Tuple<string, IGraphDataAction> defaultDropdownNameToAdd { get; set; }

        public IGraphDataAction addCategoryAction { get; set; }
        public Action<IGraphDataAction> requestModelChangeAction { get; set; }
        public List<CategoryData> categoryInfoList { get; set; }

        // Can't add disbled keywords, so don't need an add action
        public List<string> disabledKeywordNameList { get; set; }
        public List<string> disabledDropdownNameList { get; set; }

        public BlackboardViewModel()
        {
            propertyNameToAddActionMap = new Dictionary<string, IGraphDataAction>();
            defaultKeywordNameToAddActionMap = new Dictionary<string, IGraphDataAction>();
            builtInKeywordNameToAddActionMap = new Dictionary<string, IGraphDataAction>();
            defaultDropdownNameToAdd = null;
            categoryInfoList = new List<CategoryData>();
            disabledKeywordNameList = new List<string>();
            disabledDropdownNameList = new List<string>();
        }

        public void ResetViewModelData()
        {
            subtitle = String.Empty;
            propertyNameToAddActionMap.Clear();
            defaultKeywordNameToAddActionMap.Clear();
            builtInKeywordNameToAddActionMap.Clear();
            defaultDropdownNameToAdd = null;
            categoryInfoList.Clear();
            disabledKeywordNameList.Clear();
            disabledDropdownNameList.Clear();
            requestModelChangeAction = null;
        }
    }
}