using System.IO;
using CefSharp;
using TweetLib.Core.Browser;

namespace TweetDuck.Browser.Adapters{
    sealed class CefScriptExecutor : IScriptExecutor{
        private readonly IWebBrowser browser;

        public CefScriptExecutor(IWebBrowser browser){
            this.browser = browser;
        }

        public void RunFunction(string name, params object[] args){
            browser.ExecuteScriptAsync(name, args);
        }

        public void RunScript(string identifier, string script){
            using IFrame frame = browser.GetMainFrame();
            RunScript(frame, script, identifier);
        }

        public bool RunFile(string file){
            using IFrame frame = browser.GetMainFrame();
            return RunFile(frame, file);
        }

        // Helpers

        public static void RunScript(IFrame frame, string script, string identifier){
            if (script != null){
                frame.ExecuteJavaScriptAsync(script, identifier, 1);
            }
        }

        public static bool RunFile(IFrame frame, string file){
            string script = Program.Resources.Load(file);
            RunScript(frame, script, "root:" + Path.GetFileNameWithoutExtension(file));
            return script != null;
        }
    }
}