using System;
using System.IO;

using Avalonia.Styling;

using AvaloniaEdit;
using AvaloniaEdit.TextMate;

using TextMateSharp.Grammars;

namespace SourceGit.Models
{
    public static class TextMateHelper
    {
        public static TextMate.Installation CreateForEditor(TextEditor editor)
        {
            if (App.Current?.ActualThemeVariant == ThemeVariant.Dark)
            {
                return editor.InstallTextMate(new RegistryOptions(ThemeName.DarkPlus));
            }
            else
            {
                return editor.InstallTextMate(new RegistryOptions(ThemeName.LightPlus));
            }
        }

        public static void SetThemeByApp(TextMate.Installation installation)
        {
            if (installation == null)
                return;

            var reg = installation.RegistryOptions as RegistryOptions;
            if (App.Current?.ActualThemeVariant == ThemeVariant.Dark)
            {
                installation.SetTheme(reg.LoadTheme(ThemeName.DarkPlus));
            }
            else
            {
                installation.SetTheme(reg.LoadTheme(ThemeName.LightPlus));
            }
        }

        public static void SetGrammarByFileName(TextMate.Installation installation, string filePath)
        {
            if (installation == null)
                return;

            var ext = Path.GetExtension(filePath);
            if (ext == ".h")
            {
                ext = ".cpp";
            }
            else if (ext == ".resx" || ext == ".plist")
            {
                ext = ".xml";
            }

            var reg = installation.RegistryOptions as RegistryOptions;
            installation.SetGrammar(reg.GetScopeByExtension(ext));
            GC.Collect();
        }
    }
}
