% :- use_module('../prolog/units.pl').
:- use_module(library(units)).

units:relative_point_origin(room_reference_temp,point(21*(si:degree_Celsius))).

main :-
   qeval(StepDelta is 0.5 * degree_Celsius),
   NumberOfSteps = 6,
   qeval(RoomRef is room_reference_temp + 0 * isq:'Celsius_temperature'[degree_Celsius]),
   qeval(RoomLow is RoomRef - NumberOfSteps * StepDelta),
   qeval(RoomHigh is RoomRef + NumberOfSteps * StepDelta),
   format("Room reference temperature: ~@ (~@, ~@)~n", [
      qformat(RoomRef.quantity_from(si:ice_point)),
      qformat(RoomRef.in(usc:degree_Fahrenheit).quantity_from(usc:zeroth_degree_Fahrenheit)),
      qformat(RoomRef.in(si:kelvin).quantity_from(si:absolute_zero))]),
   nl,
   F = "| ~t~s~t~20+ | ~t~s~t~20+ | ~t~s~t~20+ | ~t~s~t~20+ |~n",
   format(F, ["Temperature delta", "Room reference", "Ice point", "Absolute zero"]),
   format("|~`=t~21+|~`=t~20+|~`=t~20+|~`=t~20+|~n"),
   print_temp("Lowest", RoomLow),
   print_temp("Default", RoomRef),
   print_temp("Highest", RoomHigh),
   true.

print_temp(Name, V) :-
   qeval((
      V1 is V - room_reference_temp,
      V2 is V - si:ice_point in degree_Celsius,
      V3 is V - si:absolute_zero in degree_Celsius
   )),
   F = "| ~s~t~20+ | ~t~@~t~20+ | ~t~@~t~20+ | ~t~@~t~20+ |~n",
   format(F, [Name, qformat(V1), qformat(V2), qformat(V3)]),
   true.