using CefSharp;

namespace TweetDck.Core.Handling{
    class ContextMenuHandler : IContextMenuHandler{
        private const int MenuSettings = 26500;
        private const int MenuAbout = 26501;

        private readonly FormBrowser form;

        public ContextMenuHandler(FormBrowser form){
            this.form = form;
        }

        public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){
            model.Remove(CefMenuCommand.Back);
            model.Remove(CefMenuCommand.Forward);
            model.Remove(CefMenuCommand.Print);
            model.Remove(CefMenuCommand.ViewSource);

            if (model.Count > 0 && model.GetTypeAt(model.Count-1) == MenuItemType.Separator){
                model.RemoveAt(model.Count-1);
            }
            
            model.AddItem(CefMenuCommand.Reload,"Reload");
            model.AddSeparator();

            if (TweetNotification.IsReady){
                model.AddItem((CefMenuCommand)MenuSettings,"Settings");
                model.AddSeparator();
            }

            model.AddItem((CefMenuCommand)MenuAbout,"About "+Program.BrandName);
        }

        public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags){
            switch((int)commandId){
                case MenuSettings:
                    form.InvokeSafe(() => {
                        form.OpenSettings();
                    });

                    return true;

                case MenuAbout:
                    form.InvokeSafe(() => {
                        form.OpenAbout();
                    });

                    return true;
            }

            return false;
        }

        public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame){}

        public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback){
            return false;
        }
    }
}