#!/bin/bash

# fqt - FLAMP Queue Touch'
#
# Simplify matching queue ID in FLAMP by changing file's date.

Help()
{
   echo 'Usage: fqt \[OPTION\]... TIMESTAMP... FILE...'
   echo 'Update a file'\''s timestamp helping recreate the hash, or queue id, in FLAMP.'
   echo
   echo 'options:'
   echo '  -h             display this help and exit'
   echo '  --help         display longer help and exit'
   echo '  -v, --version  output version information and exit'
   echo
   echo 'fqt is short for FLAMP Queue Touch'
}

LongHelp()
{
   echo 'Example'
   echo '  FLAMP text shown in FLDIGI:'
   echo '/// BEGIN ///'
   echo 'QST DE N0CALL'
   echo
   echo '<PROG 18 588E>{D5C6}FLAMP 2.2.07'
   echo '<FILE 35 EEAC>{D5C6}20230610151423:flamp-file.k2s'
   echo '                    ^^^^^^^^^^^^^^--> --> --> --> Use these numbers -->\'
   echo '<ID 26 6D1A>{D5C6}N0CALL Demonstration'
   echo '<SIZE 13 4B1B>{D5C6}45 1 64                                           |'
   echo '<DATA 53 5A03>{D5C6:1}[b64:start]VGhpcyBpcyBhIHRlc3QuCg==             v'
   echo '[b64:end]'
   echo '<CNTL 10 2CBA>{D5C6:EOF}                                              |'
   echo '<CNTL 10 8CB6>{D5C6:EOT}                                              v'
   echo
   echo 'QST DE N0CALL K                                                       |'
   echo '///  END  ///                                                         v'
   echo '               vvvvvvvvvvvvvv <-- <-- <-- <-- <-- <-- <-- Here <-- <--/'
   echo '  command: fqt 20230607013934 flamp-file.k2s'
   echo
   echo 'Tips'
   echo '  If hash doesn'\''t match, try to'
   echo '    Remove and re-Add the file in FLAMP'
   echo '    Toggle Comp check box (usually compression, unless file is small)'
   echo '    Change base64 (usually base64)'
   echo '    Change Blk size (usually 64)'
   echo
   echo 'Information on hash in documentation'
   echo 'FLAMP Amateur Multicast Protocol (AMP-2) - Version 3.0'
   echo 'available at: <http://www.w1hkj.com/files/flamp/Amp-2.V3.0.Protocol.pdf>'
   echo
   echo '  20130316010524:ShortMessage2.txt0base12896'
   echo
   echo '  Example format:'
   echo
   echo '  |20130316010524:ShortMessage2.txt|0|base128|96|'
   echo '  |     DTS      :       FN        |C|   B   |BS|'
   echo
   echo '  DTS = Date/Time Stamp'
   echo '  FN  = File Name'
   echo '   C  = Compression 1=ON,0=OFF'
   echo '   B  = Base Conversion (base64, base128, or base256)'
   echo '  BS  = Block Size, 1 or more characters'
   echo '   |  = Field separator.'
   echo
   echo 'Usage: fqt [OPTION]... TIMESTAMP... FILE...'
   echo 'Update a file'\''s timestamp helping recreate the hash, or queue id, in FLAMP.'
   echo
   echo 'TIMESTAMP is the string appearing in FLAMP header'
   echo 'and is formatted YYYYmmddHHMMSS '
   echo
   echo 'A FILE argument that does not exist is created empty. (Not helpful.)'
   echo
   echo 'options:'
   echo '  -h             display short help and exit'
   echo '  --help         display this longer help and exit'
   echo '  -v, --version  output version information and exit'
   echo
   echo 'This should work across timezones and across Daylight Savings times.'
   echo
   echo 'fqt is short for FLAMP Queue Touch'
}

Version()
{
   echo 'fqt - FLAMP Queue Touch'
   echo 'Not Copyrighted'
   echo 'No License'
   echo 'This is free software: you are free to change and redistribute it.'
   echo 'There is NO WARRANTY, to the extent permitted by law.'
   echo
   echo 'Use at your own risk!'
   echo
   echo 'Written by a ham.'
}

# Note that we use "$@" to let each command-line parameter expand to a
# separate word. The quotes around "$@" are essential!
# We need TEMP as the 'eval set --' would nuke the return value of getopt.
if ! TEMP=$(getopt -o '::hv' --long 'help,version' -n 'fqt' -- "$@") ;
then
        echo 'Unexpected input. Terminating...' >&2
        exit 1
fi

# Note the quotes around "$TEMP": they are essential!
eval set -- "$TEMP"
unset TEMP


# getopt -l "help" -a -o "" -- "$@"
while true; do
   case "$1" in
      '-h')
         Help
         exit;;
      '--help')
         LongHelp
         exit;;
      '-v'|'--version')
         Version
         exit;;
      '--') # Useless for this file?
         shift
         break;;
     *) # Invalid option
         echo 'Error: Invalid option'
         exit 1;;
   esac
done

GIVEN="$1"
#echo "$GIVEN"
# YYYYmmddHHMMSS
# 20230607013934

GIVEN_DATE=$(echo "$GIVEN" | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3 \4:\5:\6/')
#echo "$GIVEN_DATE"
# YYYY-mm-dd HH:MM:SS
# 2023-06-07 01:39:34

UTC_TOUCH="$(date -d "$GIVEN_DATE"Z +%Y%m%d%H%M.%S)"
#echo "$UTC_TOUCH"
# YYYYmmddHHMM.SS
# 202306062139.34

#echo touch -mt "$UTC_TOUCH" "$2"
touch -mt "$UTC_TOUCH" "$2"
