#!/bin/bash

# make json for tapdown list in index2.html
#   for 1 recipe
# input parameter:
#   F_IGURES (1d array for bash)
#   S_HAPE   (1d to nd)
#   S_ELECTS (1d array of name of selects, should be same dims of shape)
#   O_PTIONS (1d array of name of options, for all selects, should be all)
# inp_ut example:
#   F_IGURES: "fromJan_1" "fromJan_2" "fromJan_3" "fromJan_4"  "fromApr_1" "fromApr_2" "fromApr_3" "fromApr_4"  "fromJul_1" "fromJul_2" "fromJul_3" "fromJul_4"  "fromOct_1" "fromOct_2" "fromOct_3" "fromOct_4" 
#   S_HAPE: 4 4
#   S_ELECTS: initTime  leadSeason
#   O_PTIONS: "fromJan" "fromApr" "fromJul" "fromOct" 1 2 3 4
   
# output json example:
#{
#"select" : {
#        "initTime" : ["fromJan","fromApr","fromJul","fromOct"],
#        "leadSeason" : [1,2,3,4] 
#        },
#"selectOrder" : [
#        "initTime",
#        "leadSeason"
#        ],
#"figures": [
#     ["fromJan_1","fromJan_2","fromJan_3","fromJan_4"],
#     ["fromApr_1","fromApr_2","fromApr_3","fromApr_4"],
#     ["fromJul_1","fromJul_2","fromJul_3","fromJul_4"],
#     ["fromOct_1","fromOct_2","fromOct_3","fromOct_4"] 
#    ]
#}

#;DIAG_NORCPM; FIGURES: 
    # figure files name "without suffix"
    # should be ps or png file
#;DIAG_NORCPM; TITLE: TITLE here
#;DIAG_NORCPM; COMMENT: COMMENT here
declare -a figures
declare -a shape
declare -a selects
declare -a options

## testing code
#figures=("fromJan_1" "fromJan_2" "fromJan_3" "fromJan_4"  "fromApr_1" "fromApr_2" "fromApr_3" "fromApr_4"  "fromJul_1" "fromJul_2" "fromJul_3" "fromJul_4"  "fromOct_1" "fromOct_2" "fromOct_3" "fromOct_4")
#shape=(4 2 2)
#selects=(initTime leadSeason)
#options=("fromJan" "fromApr" "fromJul" "fromOct" 1 2 3 4)

figures=(sst_global_rank_histogram_lead1_FMA sst_global_rank_histogram_lead2_MJJ sst_global_rank_histogram_lead3_ASO sst_global_rank_histogram_lead4_NDJ sst_global_rank_histogram_lead1_MJJ sst_global_rank_histogram_lead2_ASO sst_global_rank_histogram_lead3_NDJ sst_global_rank_histogram_lead4_FMA sst_global_rank_histogram_lead1_ASO sst_global_rank_histogram_lead2_NDJ sst_global_rank_histogram_lead3_FMA sst_global_rank_histogram_lead4_MJJ sst_global_rank_histogram_lead1_NDJ sst_global_rank_histogram_lead2_FMA sst_global_rank_histogram_lead3_MJJ sst_global_rank_histogram_lead4_ASO
sst_rank_freq_bins_lead1_FMA sst_rank_freq_bins_lead2_MJJ sst_rank_freq_bins_lead3_ASO sst_rank_freq_bins_lead4_NDJ sst_rank_freq_bins_lead1_MJJ sst_rank_freq_bins_lead2_ASO sst_rank_freq_bins_lead3_NDJ sst_rank_freq_bins_lead4_FMA sst_rank_freq_bins_lead1_ASO sst_rank_freq_bins_lead2_NDJ sst_rank_freq_bins_lead3_FMA sst_rank_freq_bins_lead4_MJJ sst_rank_freq_bins_lead1_NDJ sst_rank_freq_bins_lead2_FMA sst_rank_freq_bins_lead3_MJJ sst_rank_freq_bins_lead4_ASO
sst_NAtl_rank_histogram_lead1_FMA sst_NAtl_rank_histogram_lead2_MJJ sst_NAtl_rank_histogram_lead3_ASO sst_NAtl_rank_histogram_lead4_NDJ sst_NAtl_rank_histogram_lead1_MJJ sst_NAtl_rank_histogram_lead2_ASO sst_NAtl_rank_histogram_lead3_NDJ sst_NAtl_rank_histogram_lead4_FMA sst_NAtl_rank_histogram_lead1_ASO sst_NAtl_rank_histogram_lead2_NDJ sst_NAtl_rank_histogram_lead3_FMA sst_NAtl_rank_histogram_lead4_MJJ sst_NAtl_rank_histogram_lead1_NDJ sst_NAtl_rank_histogram_lead2_FMA sst_NAtl_rank_histogram_lead3_MJJ sst_NAtl_rank_histogram_lead4_ASO
sst_WNPac_rank_histogram_lead1_FMA sst_WNPac_rank_histogram_lead2_MJJ sst_WNPac_rank_histogram_lead3_ASO sst_WNPac_rank_histogram_lead4_NDJ sst_WNPac_rank_histogram_lead1_MJJ sst_WNPac_rank_histogram_lead2_ASO sst_WNPac_rank_histogram_lead3_NDJ sst_WNPac_rank_histogram_lead4_FMA sst_WNPac_rank_histogram_lead1_ASO sst_WNPac_rank_histogram_lead2_NDJ sst_WNPac_rank_histogram_lead3_FMA sst_WNPac_rank_histogram_lead4_MJJ sst_WNPac_rank_histogram_lead1_NDJ sst_WNPac_rank_histogram_lead2_FMA sst_WNPac_rank_histogram_lead3_MJJ sst_WNPac_rank_histogram_lead4_ASO)
shape=(4 4 4)
selects=("Region/type" "Initial Time" "Forecast Months")
options=("Global" "SideBins" "NAtl" "WNPac" "from Jan" "from Apr" "from Jul" "from Oct" "1-3" "4-6" "7-9" "10-12")
jsonfile=20_rank_histogram.json

text=$'{\n'

# select object
ishape=0
jj=0
text+=$'    "select" : {\n'
    for i in "${selects[@]}" ; do
        if [ $jj -ne 0 ];then
            text+=$',\n'
        fi
        shapem1=$((${shape[$ishape]} - 1))
        text+='        "'${i}'" : ['
        for j in $(seq $shapem1); do
            text+='"'${options[$jj]}'", '
            jj=$(($jj + 1))
        done
        text+='"'${options[$jj]}'"]'
        jj=$(($jj + 1))
        ishape=$(($ishape + 1))
    done
text+=$'\n        },\n'


# selectOrder array
jj=0
text+=$'    "selectOrder" : [\n'
for i in "${selects[@]}" ; do
    if [ $jj -ne 0 ];then
        text+=$',\n'
    fi
    text+='        "'${i}'"'
    jj=$(($jj + 1))
done

text+=$'\n        ],\n'



# figures array
## get split point
### reverse array, somewhat it more reasonable to break down figure array
declare -a revShape
for i in "${shape[@]}" ; do
    revShape=("$i" "${revShape[@]}")
done

declare -a splitShape
jj=1
for i in "${revShape[@]}" ; do
    jj=$(($jj * $i))
    splitShape+=($jj)
done

text+=$'    "figures" : '
for j in "${splitShape[@]}"; do
    text+='['
done
text+=$'\n        '

jj=0
for i in "${figures[@]}" ; do
    text+='"'${i}'"'
    splitF=0

    for j in "${splitShape[@]}"; do
        if [ $(( ($jj + 1) % $j)) == '0' ];then
            text+=$']'
            splitF=1
        fi
    done
    if [ $(($jj + 1)) -lt "${#figures[@]}" ];then
        text+=$', '
    fi
    if [ "$splitF" == '1' ] ; then
        text+=$'\n        '
    fi
    for j in "${splitShape[@]}"; do
        if [ $(( ($jj + 1) % $j)) == '0' ] && [ $(($jj + 1)) -lt "${#figures[@]}" ];then
            text+=$'['
        fi
    done
    jj=$(($jj + 1))
done

text+='        '
#for j in $(seq $((${#splitShape[@]} - 1))); do
#    text+=']'
#done
text+=$'\n'

# end of json
text+='}'


# output to json
echo "$text" > "${jsonfile}"


