unit browsermodules;

{$mode delphi}

interface

uses
  Classes, SysUtils;

type

  TBrowserModuleUIElement = (bmueEnabledDisableMenu, bmueCommandsSubmenu);
  TBrowserModuleUIElements = set of TBrowserModuleUIElement;

  { TBrowserModule }

  TBrowserModule = class
  public
    ShortDescription: string;
    Activated: Boolean;
    constructor Create; virtual;
    //
    function GetModuleUIElements(): TBrowserModuleUIElements; virtual;
    // For active/disabled modules
    function HandleOnPageLoad(AInput: string; out AOutput: string): Boolean; virtual;
    // For expansions
    function GetCommandCount: Integer; virtual;
    function GetCommandName(AID: Integer): string; virtual;
    procedure ExecuteCommand(AID: Integer); virtual;
  end;

procedure RegisterBrowserModule(AModule: TBrowserModule);
function GetBrowserModule(AIndex: Integer): TBrowserModule;
function GetBrowserModuleCount(): Integer;

implementation

var
  gBrowserModules: TList;

procedure RegisterBrowserModule(AModule: TBrowserModule);
begin
  if AModule = nil then raise Exception.Create('[RegisterBrowserModule] Attempted to register a nil Module');
  gBrowserModules.Add(AModule);
end;

function GetBrowserModule(AIndex: Integer): TBrowserModule;
begin
  if AIndex < 0 then Exit(nil);
  Result := TBrowserModule(gBrowserModules.Items[AIndex]);
end;

function GetBrowserModuleCount: Integer;
begin
  Result := gBrowserModules.Count;
end;

{ TBrowserModule }

constructor TBrowserModule.Create;
begin

end;

function TBrowserModule.GetModuleUIElements: TBrowserModuleUIElements;
begin
  Result := [bmueEnabledDisableMenu];
end;

function TBrowserModule.HandleOnPageLoad(AInput: string; out AOutput: string): Boolean;
begin
  AOutput := '';
  Result := False;
end;

function TBrowserModule.GetCommandCount: Integer;
begin
  Result := 0;
end;

function TBrowserModule.GetCommandName(AID: Integer): string;
begin
  Result := '';
end;

procedure TBrowserModule.ExecuteCommand(AID: Integer);
begin

end;

initialization
  gBrowserModules := TList.Create;
finalization
  gBrowserModules.Free;
end.