using System.Collections.Generic;
using UnityEditor;


/// <summary>
/// Utility class that manages Define Symbols for a given set of build targets.
/// </summary>
public class DefineSymbolsManager  {
    private Dictionary<BuildTargetGroup, DefineSymbols> defineSymbols  = new Dictionary<BuildTargetGroup, DefineSymbols>();

    public DefineSymbolsManager(BuildTargetGroup[] groups)
    {
        foreach (var group in groups)
        {
            var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
            defineSymbols.Add(group, new DefineSymbols(symbols));
        }
    }

    public void UpdateFromBuildSettings()
    {
        var groups = defineSymbols.Keys;
        defineSymbols = new Dictionary<BuildTargetGroup, DefineSymbols>();

        foreach (var group in groups)
        {
            var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
            defineSymbols.Add(group, new DefineSymbols(symbols));
        }

    }

    public void ApplyToBuildSettings()
    {
        foreach (var e in defineSymbols)
        {
            PlayerSettings.SetScriptingDefineSymbolsForGroup(e.Key, e.Value.Get());
        }
    }

    public void Add(string symbol)
    {
        foreach (var item in defineSymbols)
        {
            item.Value.Add(symbol);
        }
    }

    public void Remove(string symbol)
    {
        foreach (var item in defineSymbols)
        {
            item.Value.Remove(symbol);
        }
    }

    public bool Has(string symbol)
    {
        var has = true;

        foreach (var item in defineSymbols)
        {
            has = has && item.Value.Has(symbol);
        }

        return has;
    }

    public override string ToString()
    {
        var str = "DefineSymbolsManager {\n";

        foreach (var item in defineSymbols)
        {
            str += item.Key + ": " + item.Value.Get() + "\n";
        }

        str += "}";

        return str;
    }
}