RunOncePath("lib/flap_control").
RunOncePath("lib/stabilize_aircraft").
RunOncePath("lib/ui").

clearguis().

global done is false.
on AG9 {
  set done to true.
  return true.
}

global takeoffAngle is 15.
global landingAngle is 30.

function landingMode {
  print "Setting flaps to landing mode.".
  SetFlapAngle(landingAngle).
  when SHIP:VELOCITY:SURFACE:MAG < 0.1 then {
    takeoffMode().
  }
}

function takeoffMode {
  print "Setting flaps to takeoff mode.".
  SetFlapAngle(takeoffAngle).
  on GEAR {
    if GEAR = true {
      return true.
    }
    landingMode().
  }
}

if SHIP:STATUS = "LANDED" or SHIP:STATUS = "PRELAUNCH" {
  takeoffMode().
} else {
  landingMode().
}

// Top-level elements.
local iface is gui(250, 300).
set iface:X to 200.
set iface:Y to 700.
local top is iface:AddVLayout().
local rows is List(MakeRow(top), MakeRow(top)).
local stk is iface:AddStack().

AddStockButtons(rows[0], "aircraft").
MakeMenu(
  stk,
  MakeButton(rows[0], "Config"),
  List(
    List("Takeoff Flap Angle", "SCALAR", "15"),
    List("Landing Flap Angle", "SCALAR", "30")
  ),
  "Apply",
  {
    parameter options.
    set takeoffAngle to options["Takeoff Flap Angle"]:TEXT:ToNumber().
    set landingAngle to options["Landing Flap Angle"]:TEXT:ToNumber().
  }
).

MakeMenu(
  stk,
  MakeButton(rows[1], "Level"),
  List(
    List("Kp", "SCALAR", "0.02"),
    List("Ki", "SCALAR", "0.01"),
    List("Kd", "SCALAR", "1")
  ),
  "Execute",
  {
    parameter options.
    HoldHorizon(
      options["Kp"]:TEXT:ToNumber(),
      options["Ki"]:TEXT:ToNumber(),
      options["Kd"]:TEXT:ToNumber()
    ).
  }
).


iface:show().

wait until false.