; installer.pb
; ------------------------------------------------------------
; installer wrapper for setup.exe 
; LICENSE  : GPL
; AUTHOR   : Michael H.G. Schmidt
; EMAIL    : michael@schmidt2.de
; DATE     : 20230220
; ------------------------------------------------------------
;

; preparations to use native "system" command ...
ImportC "msvcrt.lib"
  system(str.p-ascii)
EndImport

; Get system drive
Global SYS$=GetEnvironmentVariable("SystemDrive")

Procedure StartInstallation(mode$)
  
  Result = MessageRequester("+++ Windows 10 unattended Installation +++",
                            "This will install a new OS (unattended)" + Chr(13) +
                            "and it will DELETE all DATA an your [ C: ] Drive!",
                            #PB_MessageRequester_YesNo | #PB_MessageRequester_Info)
  
  If Result = #PB_MessageRequester_Yes
    
    Result = MessageRequester("Caution !",
                              "LAST WARNING:" + Chr(13) + 
                              "REALLY DELETE ALL Data on DRIVE [ C: ] ?",
                              #PB_MessageRequester_YesNo | #PB_MessageRequester_Warning)

    ; start installation ...
    If Result = #PB_MessageRequester_Yes
      dummy=system(SYS$ + "\winsetup.exe /unattend:" + SYS$ + "\autounattend_" + mode$ + ".xml")
      End
    EndIf
 
  EndIf

  ; new fullscreen window with red colour ...
  OpenWindow(10, 0, 0, 0, 0, "", #PB_Window_BorderLess | #PB_Window_Maximize)
  SetWindowColor(10, RGB($FF,$00,$00))
  
  ; kill main window ...
  CloseWindow(0)
  
  MessageRequester("END.","Press OK to shutdown your system.",#PB_MessageRequester_Info)
    
  End
  
EndProcedure

Procedure StartCMD()
  
  MessageRequester("HELP. Please read me 1st.",
                   "Type <netuse> to mount a network share" + Chr(13) +
                   "Type <snapshot64> to start backup/restore" + Chr(13) + Chr(13) +
                   "(Network will be started automatically but it must" + Chr(13) +
                   " be connected with a cable and a DHCP server" + Chr(13) +
                   " must be present in your local network)",
                   #PB_MessageRequester_Info)
  
  ; start a command shell ...
  dummy=system(SYS$ + "\windows\system32\cmd.exe /C start /D "+SYS$+"\ "+SYS$+"\windows\system32\cmd.exe /K wpeutil initializenetwork")
  
EndProcedure

Procedure StartSnapshot64()
  
  ; start backup/restore program ...
  dummy=system(SYS$ + "\windows\system32\cmd.exe /C start /D "+SYS$+"\ "+SYS$+"\snapshot64.exe")
  
EndProcedure

; Button handler procedure
Procedure ButtonHandler()
  
  Select EventGadget()
      
    Case 0
      StartInstallation("BIOS")
    Case 1
      StartInstallation("UEFI")
    Case 2
      StartCMD()
    Case 3
      StartSnapshot64()
      
  EndSelect

EndProcedure

;;;;;;;
; MAIN
;;;;;;;

; open window to hide all other windows on desktop ...
OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_BorderLess | #PB_Window_Maximize)
 
; set colour to windows blue ...
SetWindowColor(0, RGB($00,$a2,$ed)) 

; Get window size
W = WindowWidth(0)
H = WindowHeight(0)

; Shrink factor for buttons
S=0.1

; X and Y root
X0=W/2-(W*S/2)
Y0=H/2-(W*S/2)

; position calculations for the buttons
GAP=W*0.01
ButtonW=W*0.1
ButtonH=H*0.1

BX0=ButtonW*3-GAP*1.5
BX1=BX0 + ButtonW + GAP
BX2=BX1 + ButtonW + GAP
BX3=BX2 + ButtonW + GAP

BY=H/2-ButtonH/2

; Create Buttons
ButtonGadget(0, BX0, BY, ButtonW, ButtonH, "INSTALL (BIOS mode)", #PB_Button_MultiLine)
BindGadgetEvent(0, @ButtonHandler())

ButtonGadget(1, BX1, BY, ButtonW, ButtonH, "INSTALL (UEFI mode)", #PB_Button_MultiLine)
BindGadgetEvent(1, @ButtonHandler())

ButtonGadget(2, BX2, BY, ButtonW, ButtonH, "COMMAND shell"+Chr(13)+"(with network)", #PB_Button_MultiLine)
BindGadgetEvent(2, @ButtonHandler())

ButtonGadget(3, BX3, BY, ButtonW, ButtonH, "Snapshot 64"+Chr(13)+"(Backup/Restore)", #PB_Button_MultiLine)
BindGadgetEvent(3, @ButtonHandler())

; MAIN LOOP
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

; IDE Options = PureBasic 5.73 LTS (Windows - x64)
; CursorPosition = 125
; FirstLine = 95
; Folding = -
; EnableXP