#!/bin/sh

locatie=$1
prevdtg=$2
timezone=$3
dtg=`$HOME/bin/mandtg $prevdtg + 6`

year=`$HOME/bin/mandtg -year $dtg`
month=`$HOME/bin/mandtg -month $dtg | sed s/^0//`
day=`$HOME/bin/mandtg -day $dtg | sed s/^0//`
weekday=`$HOME/bin/mandtg -wd.nl $dtg`

now=`date +"%Y%m%d%H"`
utcnow=`date -u +"%Y%m%d%H"`
utcoff=`$HOME/bin/mandtg $now - $utcnow`    # Compute the offset from UTC for the Central European Time Zone (us).
dstoff=`expr $utcoff - 1`                   # Compute DST from that, assuming all European time zones switch at the same day.
utcoff=`expr $timezone + $dstoff`           # Total offset from UTC is time zone offset + DST offset.

maand=(maandnul januari februari maart april mei juni juli augustus september oktober november december)

echo WEERBERICHT voor $locatie op $weekday $day ${maand[$month]} $year en de volgende dag. > $locatie.WEERBERICHT

for utcbegin in `seq 13 24 $FL`             # Start at 7 UTC in the morning - but offset by the timezone below:
do

   begin=`expr $utcbegin - $utcoff`         # Compute local 7 o'clock in the morning in UTC; correct for DST.
   end=`expr $begin + 12`                   # The end of the day is 12 hours later, at 19 o'clock local time.
   currdtg=`$HOME/bin/mandtg $dtg + $begin`
   weekday=`$HOME/bin/mandtg -wd.nl $currdtg`

   echo                                 >> $locatie.WEERBERICHT
   echo $weekday, 7-19 uur lokale tijd: >> $locatie.WEERBERICHT

#  Temperatuur.

   awk -v begin=$begin -v end=$end \
       'BEGIN {min=999;max=0}; \
        function nint(x) {return x>0 ? int(x+0.5) : int(x-0.5)}; \
        $1>=begin && $1<=end {if (min>$2) {min=$2; minh=$1}; if (max<$2) {max=$2; maxh=$1}}; \
        END {if      (max-min<2) printf "De temperatuur ligt rond %i graden Celsius.\n", nint((max+min-2*273.16)/2); \
             else if (minh>maxh) printf "De temperatuur daalt van %i tot %i graden Celsius tussen %i en %i uur.\n", \
                                          nint(max-273.16), nint(min-273.16), maxh-begin+7, minh-begin+7; \
             else                printf "De temperatuur stijgt van %i tot %i graden Celsius tussen %i en %i uur.\n", \
                                          nint(min-273.16), nint(max-273.16), minh-begin+7, maxh-begin+7}' \
                  $locatie.TEMPERATUUR >> $locatie.WEERBERICHT

#  Windsnelheid.

   awk -v begin=$begin -v end=$end \
       'BEGIN {min=999;max=0;wk[0]="stil";wk[1]="zwak";wk[2]="zwak";wk[3]="zwak";wk[4]="matig";wk[5]="matig";wk[6]="matig";wk[7]="matig"; \
               wk[8]="vrij krachtig";wk[9]="vrij krachtig";wk[10]="vrij krachtig";wk[11]="krachtig";wk[12]="krachtig";wk[13]="krachtig"; \
               wk[14]="hard";wk[15]="hard";wk[16]="hard";wk[17]="hard";wk[18]="stormachtig";wk[19]="stormachtig";wk[20]="stormachtig"; \
               wk[21]="stormachtig";wk[22]="een storm";wk[23]="een storm";wk[24]="een storm";wk[25]="een zware storm";wk[26]="een zware storm"; \
               wk[27]="een zware storm";wk[28]="een zware storm";wk[29]="een zeer zware storm";wk[30]="een zeer zware storm";wk[31]="een zeer zware storm"; \
               wk[32]="een zeer zware storm";wk[33]="een orkaan"}; \
        $1>=begin && $1<=end {if (min>$2) {min=$2; minh=$1}; if (max<$2) {max=$2; maxh=$1}}; \
        END {if      (wk[int(min+0.5)]==wk[int(max+0.5)]) printf "De wind is %s.\n", wk[int(min+0.5)]; \
             else if (minh>maxh)                          printf "De wind neemt af van %s tot %s tussen %i en %i uur.\n", \
                                                                 wk[int(max+0.5)], wk[int(min+0.5)], maxh-begin+7, minh-begin+7; \
             else                                         printf "De wind neemt toe van %s tot %s tussen %i en %i uur.\n", \
                                                                 wk[int(min+0.5)], wk[int(max+0.5)], minh-begin+7, maxh-begin+7}' \
                  $locatie.WINDSNELHEID >> $locatie.WEERBERICHT

#  Windrichting.

   awk -v begin=$begin -v end=$end \
       'BEGIN {min=999;max=0;wr[0]="noord";wr[1]="noordoost";wr[2]="oost";wr[3]="zuidoost";wr[4]="zuid";wr[5]="zuidwest";wr[6]="west";wr[7]="noordwest";wr[8]="noord"}; \
        $1>=begin && $1<=end {if (min>$2) {min=$2; minh=$1}; if (max<$2) {max=$2; maxh=$1}}; \
        END {if      (wr[int(min/45+0.5)]==wr[int(max/45+0.5)]) printf "De wind komt uit het %sen.\n", wr[int(min/45+0.5)]; \
             else if (minh>maxh) printf "De wind draait van het %sen naar het %sen tussen %i en %i uur.\n", \
                                          wr[int(max/45+0.5)], wr[int(min/45+0.5)], maxh-begin+7, minh-begin+7; \
             else                printf "De wind draait van het %sen naar het %sen tussen %i en %i uur.\n", \
                                          wr[int(min/45+0.5)], wr[int(max/45+0.5)], minh-begin+7, maxh-begin+7}' \
                  $locatie.WINDRICHTING >> $locatie.WEERBERICHT

#  Windstoten.

   awk -v begin=$begin -v end=$end \
       'BEGIN {max=0;hb[2]=0;hb[3]=0;hb[4]=0;hf[2]=0;hf[3]=0;hf[4]=0;ws[2]="stevige";ws[3]="zware";ws[4]="zeer zware"}; \
        $1>=begin && $1<=end {if (max<$2) {max=$2; if (max>14&&hb[int(max/7)]==0) hb[int(max/7)]=$1}; if ($2>14) hf[int($2/7)]=$1;} \
        END {if      (max<14) ; \
             else if (hb[int(max/7)]==hf[int(max/7)]) printf "Rond %i uur komen %s windstoten voor.\n", hb[int(max/7)]-begin+7, ws[int(max/7)]; \
             else    printf "Tussen %i en %i uur komen %s windstoten voor.\n", hb[int(max/7)]-begin+7, hf[int(max/7)]-begin+7, ws[int(max/7)]}' \
                  $locatie.WINDSTOTEN >> $locatie.WEERBERICHT

#  Neerslag.

   awk '{print $1, $4, $5}' $locatie.FRNTNEERSLAG > F$$; awk '{print $1, $4, $5}' $locatie.CONVNEERSLAG > C$$; join F$$ C$$ | awk '{print $1, $2 + $4, $3 + $5}' > RR$$
   awk -v begin=$begin -v end=$end \
       'BEGIN {nh=0;maxr=0;hmxr=0;prevh=begin-1;rr=0;rro=0;rrt=0;rrm=0}; \
        $1>=prevh && $1<=end {min=$2; max=$3; avg=(min+max)/2; \
           if ($1==prevh) {minb=min; maxb=max; prev=avg} \
           else           {rr=avg-prev; prev=avg; if (rr>0.3) nh+=1; if (maxr<rr) {maxr=rr; hmxr=$1}; \
                           if ($1-begin<5) rro+=rr; if ($1-begin>4&&$1-begin<8) rrt+=rr; if ($1-begin>7) rrm+=rr}}; \
        END {min=min-minb+0.5; max=max-maxb+0.5; if (min>max) {tmp=min; min=max; max=tmp}; \
             if (rro>rrm) {if (rrt/3>rro/5) when="tussen de middag"; else when="\x27s ochtends"} else {if (rrt/3>rrm/5) when="tussen de middag"; else when="\x27s middags"}; \
             if (nh==0) \
                if      (max==0.5) printf "Het blijft droog.\n"; \
                else if (max<1.5)  printf "Er valt geen neerslag van betekenis.\n"; \
                else               printf "Het motregent van tijd tot tijd.\n"; \
             else if (nh<4&&maxr>2.5) printf "Er valt %s hevige neerslag tussen %i en %i millimeter, tot %i mm per uur tussen %i en %i uur.\n", when, min, max, maxr+0.5, hmxr-begin+6, hmxr-begin+7; \
             else if (nh<5)           if (int(min) == int(max)) printf "Er valt %s rond %i millimeter neerslag.\n", when, min; \
                                      else                      printf "Er valt %s tussen %i en %i millimeter neerslag.\n", when, min, max; \
             else                     if (int(min) == int(max)) printf "Er valt rond %i millimeter neerslag verspreid over de dag.\n", min; \
                                      else                      printf "Er valt tussen %i en %i millimeter neerslag verspreid over de dag.\n", min, max}' \
                  RR$$ >> $locatie.WEERBERICHT
   rm F$$ C$$ RR$$

#  Onweer.

   awk '{print $1, $5}' $locatie.CAPE > CP$$; awk '{print $1, $5}' $locatie.FRNTNEERSLAG > CR$$; join CP$$ CR$$ > TS$$
   awk -v begin=$begin -v end=$end \
       'BEGIN {maxc=0;maxr=0;hmxc=0;hmxr=0;prevh=begin-1}; \
        $1>=prevh && $1<=end {if ($1==prevh) prev=$3; \
                              else           {if (maxr<$3-prev) {maxr=$3-prev; hmxr=$1}; prev=$3; if (maxc<$2) {maxc=$2; hmxc=$1}}}; \
        END {if (maxc>1000 && maxr>1 && sqrt((hmxr-hmxc)^2)<4) \
                printf "Er is kans op %sonweersbuien rond %i uur.\n", (maxc>3000 ? "zware " : ""), hmxr-begin+7}' \
                  TS$$ >> $locatie.WEERBERICHT
   rm CP$$ CR$$ TS$$

#  Bewolking.

   awk -v begin=$begin -v end=$end \
       'BEGIN {cc=0;cco=0;cct=0;ccm=0}; \
        $1>=begin && $1<=end {cc+=$2; if ($1-begin<5) cco+=$2; if ($1-begin>4&&$1-begin<8) cct+=$2; if ($1-begin>7) ccm+=$2}; \
        END {if (cco<ccm) {if (cct/3<cco/5) when="tussen de middag"; else when="\x27s ochtends"} else {if (cct/3<ccm/5) when="tussen de middag"; else when="\x27s middags"}; \
             if      (cc>12.5) printf "Het is geheel bewolkt.\n"; \
             else if (cc>10  ) printf "Het is overwegend bewolkt met %s enkele opklaringen.\n", when; \
             else if (cc< 3  ) printf "Het is vrijwel onbewolkt.\n"; \
             else              printf "Het is wisselend bewolkt met %s de meeste zon.\n", when}' \
                  $locatie.BEWOLKING >> $locatie.WEERBERICHT

#  Zicht.

   awk -v begin=$begin -v end=$end \
       'BEGIN {min=99999;hb=0}; \
        $1>=begin && $1<=end {if (min>$2) {min=$2; minh=$1; if (min<200&&hb==0) hb=$1}; if ($2<200) hf=$1}; \
        END {if      (min>200   ) ; \
             else if (min<200-50) {if (hb==hf) printf "Het zicht is minder dan 200 meter rond %i uur, tot %i meter.\n", \
                                                      hb-begin+7, int(min/10)*10; \
                                   else        printf "Het zicht is minder dan 200 meter tussen %i en %i uur, tot %i meter rond %i uur.\n", \
                                                      hb-begin+7, hf-begin+7, int(min/10)*10, minh-begin+7} \
             else if (hb==hf    ) printf "Het zicht is niet meer dan 200 meter rond %i uur.\n", hb-begin+7; \
             else                 printf "Het zicht is niet meer dan 200 meter tussen %i en %i uur.\n", hb-begin+7, hf-begin+7}' \
                  $locatie.ZICHT >> $locatie.WEERBERICHT

#  Sneeuwdek.

   awk -v begin=$begin -v end=$end \
       'BEGIN {gem=0;min=999;max=0;hb=0}; \
        $1>=begin && $1<=end {if (gem<$2) {gem=$2}; if (min>$4) {min=$4}; if (max<$5) {max=$5; maxh=$1; if (gem>0.02&&hb==0) hb=$1}; if ($2>0.02) hf=$1}; \
        END {if      (gem<0.02) ; \
             else if (gem>0.03) printf "De sneeuw is gemiddeld meer dan 2 centimeter dik tussen %i en %i uur, van %i tot %i centimeter rond %i uur.\n", \
                                       hb-begin+7, hf-begin+7, int(min*100+0.5), int(max*100+0.5), maxh-begin+7; \
             else               printf "De sneeuw is gemiddeld 2 centimeter dik tussen %i en %i uur, van %i tot %i centimeter.\n", \
                                       hb-begin+7, hf-begin+7, int(min*100+0.5), int(max*100+0.5)}' \
                  $locatie.SNEEUWHOOGTE >> $locatie.WEERBERICHT

done

exit 0
