#!/bin/bash

OF=out.subs
OFFSET=0 

get_channel_offset(){
  case "$SECTOR" in
        20)
            OFFSET="0"
            ;;
        20LR)
            OFFSET="10"
            ;;
        20INJ)
            OFFSET="16"
            ;;
        21)
            OFFSET="26"
            ;;
        22)
            OFFSET="0"
            ;;
        23)
            OFFSET="13"
            ;;
        24)
            OFFSET="26"
            ;;
        25)
            OFFSET="0"
            ;;
        26)
            OFFSET="13"
            ;;
        27)
            OFFSET="26"
            ;;
         
        28)
            OFFSET="0"
            ;;
        29)
            OFFSET="13"
            ;;
        30)
            OFFSET="26"
            ;;
         
        *)
            OFFSET="0"
 
esac


}

generate_tc_subs(){
    echo "    pattern {CR,SECTOR,MOD,CHANNEL,INDEX,ID0,ID1,ID2,ID3,ID4,ID5,ID6}">>$OF
    for i in `seq 0 $NUM_CHANS` ;
    do
       MOD=$(($i / 4 + 1 ))
       CHAN=$(($i % 4))
       INDEX=$(($OFFSET + $MOD - 1 ))
       ID0=$i
       ID1=$(($i*5))
       ID2=$((ID1 + 1 ))
       ID3=$((ID2 + 1 ))
       ID4=$((ID3 + 1 ))
       ID5=$((ID4 + 1 ))
       ID6=$((ID5 + 1 ))
       echo "    {$CR,$SECTOR,$MOD,$(printf "%02d" $CHAN),$INDEX,$ID0,$ID1,$ID2,$ID3,$ID4,$ID5,$ID6}" >> $OF
    done

}

generate_cjc_subs(){
    echo "    pattern {CR,SECTOR,MOD,INDEX}">>$OF
    for i in `seq 1 $NUM_MODS` ;
    do
       MOD=$i
       INDEX=$(($OFFSET + $MOD - 1))
       echo "    {$CR,$SECTOR,$MOD,$INDEX}" >> $OF
    done
}

generate_tag_subs(){
    echo "    pattern {SECTOR,TAG,INDEX,TYPE}">>$OF
    for i in `seq 0 $NUM_CHANS` ;
    do
       INDEX=$i
       TAG=$TAG
       TYPE=$TAG_TYPE
       echo "    {$SECTOR,$TAG,$INDEX,$TAG_TYPE}" >> $OF
    done
}

generate_tag_footer(){
       echo "file templates/tag-footer.xml{
        pattern{TAG}
        {$TAG}    
     }" >> $OF
}

generate_tag_header(){
   echo "file templates/tag-header.xml{
        pattern{TAG}
        {$TAG}
    }" >> $OF

}

generate_routine_footer(){
       echo "file templates/routine-footer.xml{
        pattern{ROUTINE_NAME}
        {$ROUTINE_NAME}    
     }" >> $OF
}

generate_fbd_routine_footer(){
       echo "file templates/routine-footer-filter.xml{
        pattern{ROUTINE_NAME}
        {$ROUTINE_NAME}    
     }" >> $OF
}

generate_routine_header(){
   echo "file templates/routine-header.xml{
        pattern{ROUTINE_NAME}
        {$ROUTINE_NAME}
    }" >> $OF

}

generate_fbd_routine_header(){
   echo "file templates/routine-header-filter.xml{
        pattern{ROUTINE_NAME}
        {$ROUTINE_NAME}
    }" >> $OF

}

generate_logix_footer(){
  echo "file templates/logix-footer.xml{
        pattern{SECTOR}
        {$SECTOR}
    }" >> $OF
}

generate_logix_header(){
   echo "file templates/logix-header.xml{
        pattern{SECTOR}
        {$SECTOR}
    }" >> $OF
}

generate_fbd_logix_header(){
   echo "file templates/logix-header-filter.xml{
        pattern{SECTOR}
        {$SECTOR}
    }" >> $OF
}

generate_routines_footer(){
  echo "file templates/routines-footer.xml{
        pattern{SECTOR}
        {$SECTOR}
    }" >> $OF
}

generate_routines_header(){
   echo "file templates/routines-header.xml{
        pattern{SECTOR}
        {$SECTOR}
    }" >> $OF
}


if [ \( -n $1 \) -a \( -n $2 \)  -a \( -n $3 \) ] ; then
    pushd substitutions
    
    #User inputs
    SECTOR=$1
    CR=$3
    OF="$SECTOR-data.substitutions"
    NUM_CHANS=$(($2-1))
    NUM_MODS=$(($2/4))    
    get_channel_offset
    
    echo "#Generated  by script genateSubs.sh" > $OF 

    generate_logix_header
    generate_routines_header
    #Create TC Data Routine
    ROUTINE_NAME="tc_data_copy_sector_$SECTOR"
    generate_routine_header
    echo "file templates/tc-per-channel.xml{" >> $OF
    generate_tc_subs
    echo "}" >> $OF
    generate_routine_footer
    
    #Create TC Fault Routine
    ROUTINE_NAME="tc_fault_copy_sector_$SECTOR"
    generate_routine_header
    echo "file templates/tc-fault-per-channel.xml{" >> $OF
    generate_tc_subs
    echo "}" >> $OF
    generate_routine_footer
    
    #Create CJC Data Routine
    ROUTINE_NAME="cjc_data_copy_sector_$SECTOR"
    generate_routine_header
    echo "file templates/cjc-per-module.xml{" >> $OF
    generate_cjc_subs
    echo "}" >> $OF
    generate_routine_footer
    
    #Create CJC Fault Routine
    ROUTINE_NAME="cjc_fault_copy_sector_$SECTOR"
    generate_routine_header
    echo "file templates/cjc-fault-per-module.xml{" >> $OF
    generate_cjc_subs
    echo "}" >> $OF
    generate_routine_footer
    generate_routines_footer
    generate_logix_footer

    OF="$SECTOR-filter.substitutions"
    ROUTINE_NAME="tc_filter_data_sector_$SECTOR"
    
    echo "#Generated  by script genateSubs.sh" > $OF 
    generate_fbd_logix_header
    
    #Create tags for filters
    TAG="LPF_"
    TAG_TYPE="FILTER_LOW_PASS"
    generate_tag_header
    echo "file templates/tag-template.xml{" >> $OF
    generate_tag_subs
    echo "}" >> $OF
    generate_tag_footer
    

    
    #Create Filter Routine (sent to seperate file)
    generate_routines_header
    generate_fbd_routine_header
    echo "file templates/tc-filter-per-channel.xml{" >> $OF
    generate_tc_subs
    echo "}" >> $OF
    generate_fbd_routine_footer
    generate_routines_footer
    generate_logix_footer
   
   popd
else
    echo "makeSubs.sh SECTOR NUMBER_OF_MODULES CRATE_NUMBER"
fi
