program hotreload;

uses sysutils,js,web, hotreloadclient;

Type

  { TForm }

  TForm = Class
    Button1 : TJSElement;
    Edit : TJSHTMLInputElement;
    FLastReq : TJSXMLHttpRequest;
    function RecompileClick(Event: TJSMouseEvent): boolean;
    Constructor create; reintroduce;
  private
    function DoReloadChange(Event: TEventListenerEvent): boolean;
    function doResponse(Event: TEventListenerEvent): boolean;
  end;

function TForm.doResponse(Event: TEventListenerEvent): boolean;

Var
  Data : TJSObject;
  S : String;

begin
  Result:=True;
  console.warn('Compile request response received');
  try
     Data:=TJSJSON.parseObject(FLastReq.responseText);
     if data['success'] then
       begin
       if isInteger(data['compileID']) then
         begin
         S:=String(data['compileID']);
         Edit.value:=S;
         end;
       end
     else
       Edit.value:=''
  except
    console.error('Compile request response received non-json response: '+FLastReq.ResponseText);
  end;
  FLastReq:=nil;
end;

function TForm.RecompileClick(Event: TJSMouseEvent): boolean;

Var
  Req : TJSXMLHttpRequest;

begin
   Result:=True;
   console.info('Recompile requested');
   Req:=TJSXMLHttpRequest.new;
   Req.addEventListener('load',@DoResponse);
   Req.open('POST','$sys/compile');
   Req.send;
   FLastReq:=Req;
end;

constructor TForm.Create;

Var
  D,Panel,PanelContent : TJSElement;
  CB : TJSHTMLInputElement;

begin
   Panel:=document.createElement('div');
   // attrs are default array property...
   Panel['class']:='panel panel-default';
   PanelContent:=document.createElement('div');
   PanelContent['class']:='panel-body';
   Button1:=document.createElement('input');
   Button1['id']:='Button1';
   Button1['type']:='submit';
   Button1['class']:='btn btn-default';
   Button1['value']:='Recompile';
   TJSHTMLElement(Button1).onclick:=@RecompileClick;
   document.body.appendChild(Panel);
   Edit:=TJSHTMLInputElement(document.createElement('input'));
   Edit['id']:='recompileID';
   Edit.readOnly:=true;
   cb:=TJSHTMLInputElement(document.createElement('input'));
   cb['id']:='autoreload';
   cb['type']:='checkbox';
   cb.onchange:=@DoReloadChange;
   cb.checked:=THotReload.getglobal.options.Reload;
   Panel.appendChild(PanelContent);
   PanelContent.appendChild(Button1);
   D:=Document.createElement('span');
   D.id:='buildlabel';
   D.appendChild(Document.createTextNode('Build ID'));
   PanelContent.appendChild(D);
   PanelContent.appendChild(Edit);
   PanelContent.appendChild(cb);
   D:=Document.createElement('span');
   D.id:='reloadhint';
   D.appendChild(Document.createTextNode('Reload page on build/sync'));
   PanelContent.appendChild(D);
end;

function TForm.DoReloadChange(Event: TEventListenerEvent): boolean;
begin
  Result:=True;
  THotReload.getglobal.options.Reload:=not THotReload.getglobal.options.Reload;
end;

begin
  THotReload.StartHotReload;
  TForm.Create;

//  THotReload.getglobal.options.Path:='status.json';
//  THotReload.getglobal.options.log:=True;
end.