unit meteoutil;

{$mode ObjFPC}{$H+}

interface



uses
  Classes, SysUtils, fpjson, jsonparser;


function calcolaprecipitazione (oggettoJSON:TJSONObject; ora:integer):string;
function FormattaAstroLinea(linea:string):string;
function MeseToText(mese:integer):string;
function stringarichiesta(https:boolean; lat, long: double):string;

implementation


 function calcolaprecipitazione (oggettoJSON:TJSONObject; ora:integer):string;
 var
 codice:integer;
 precipitazione:string;
 begin

   codice:=oggettoJSON.FindPath('hourly.weather_code['+inttostr(ora)+']').AsInteger;

   case codice of
   0:  precipitazione:= 'Sereno';
   1:  precipitazione:= 'Prev. Sereno';
   2:  precipitazione:= 'Parz. Nuvoloso';
   3:  precipitazione:= 'Nuvoloso';
   45..48: precipitazione:= 'Nebbia';
   51..57:    precipitazione:= 'Pioviggine';
   61..65:    precipitazione:= 'Pioggia';
   66..67:precipitazione:= 'Grandine';
   71..77:    precipitazione:= 'Neve';
   80..82:    precipitazione:= 'Rovesci';
   85..86:precipitazione:= 'Neve';
   95..99:precipitazione:= 'Temporale';
   end;

   result:=precipitazione;


 end;



function FormattaAstroLinea(linea:string):string;
var
mese:string;
begin

    mese:=MeseToText(strtoint(copy(linea, 1,2)));
    result:=copy(linea, 5, 2)+' '+copy(mese, 1, 3)+' ' +copy(linea, 16);



end;


function MeseToText(mese:integer):string;
begin
 case mese of
 1: result:='Gennaio';
 2: result:='Febbraio';
 3: result:='Marzo';
 4: result:='Aprile';
 5: result:='Maggio';
 6: result:='Giugno';
 7: result:='Luglio';
 8: result:='Agosto';
 9: result:='Settembre';
 10: result:='Ottobre';
 11: result:='Novembre';
 12: result:='Dicembre';

 end;


end;


function stringarichiesta(https:boolean; lat, long: double):string;
var
segnaposto:string;
defaultseparator:char;
begin
  if https then segnaposto:='https://' else segnaposto:='http://';
  defaultseparator:=DefaultFormatSettings.DecimalSeparator;
  DefaultFormatSettings.DecimalSeparator:='.'; //fa in modo che venga usato il punto nelle conversioni e non la virgola viene usato il punto e la virgola in base alla provenienza dell'utente di solito
  //per la richiesta serve che rappresentiamo con i punti
  segnaposto:=segnaposto+'api.open-meteo.com/v1/forecast?latitude='+floattostr(lat)+'&longitude='+floattostr(long)+'&hourly=weather_code,temperature_2m,wind_speed_10m,wind_speed_180m,visibility,cloud_cover';
  DefaultFormatSettings.DecimalSeparator:=defaultseparator; //rimette il separatore a quello di default
  result:=segnaposto;

end;


end.

