#!/bin/bash

FOLDER="/tmp/temporary-test-jfsm"
FILEPATH="$FOLDER/test.txt"

JSFM_VERSION="debug" #can be release or debug
JFSM_PATH="./target/$JSFM_VERSION/jfsm"

echo "Creating temporary folder: $FOLDER"
mkdir -p $FOLDER
# fake creation and modification timestamps
touch -c --date="2000-02-15" $FOLDER
touch -m --date="2024-01-16" $FOLDER

echo "Creating test file: $FILEPATH"
touch $FILEPATH
echo "This is a test file" > $FILEPATH #to change modification timestamp
# fake creation and modification timestamps
touch -c --date="1988-02-15" $FILEPATH
touch -m --date="2025-01-16" $FILEPATH

echo "Creating a subfolder $FOLDER/subfolder"
mkdir $FOLDER/subfolder
touch -c --date="1989-02-15" $FOLDER/subfolder
touch -m --date="2024-01-16" $FOLDER/subfolder
touch -a --date=$(date) $FOLDER/subfolder

echo "Creating a symlink to the file"
ln -s $FILEPATH $FOLDER/test-symlink-file
touch -c --date="1990-02-15" $FOLDER/test-symlink-file
touch -m --date="2023-01-16" $FOLDER/test-symlink-file
touch -a --date=$(date) $FOLDER/test-symlink-file

echo "Creating a symlink to the subfolder"
ln -s $FOLDER/subfolder $FOLDER/test-symlink-subfolder
touch -c --date="1991-02-15" $FOLDER/test-symlink-subfolder
touch -m --date="2022-01-16" $FOLDER/test-symlink-subfolder
touch -a --date=$(date) $FOLDER/test-symlink-subfolder

echo ""
echo "Linux stat output for $FILEPATH"
echo ""
echo "stat $FILEPATH"
stat $FILEPATH
echo ""

echo "Testing for $FILEPATH"
echo ""

echo "Test CLI - help"
echo ""
echo "$JFSM_PATH --help"
$JFSM_PATH --help
echo ""

echo "Test CLI - version"
echo ""
echo "$JFSM_PATH --version"
$JFSM_PATH --version
echo ""

echo "Test CLI - Default"
echo ""
echo "$JFSM_PATH $FILEPATH"
$JFSM_PATH $FILEPATH
echo ""

echo "Test CLI - with path flag"
echo ""
echo "$JFSM_PATH $FILEPATH --path"
$JFSM_PATH $FILEPATH --path
echo ""
echo "$JFSM_PATH $FILEPATH -d"
$JFSM_PATH $FILEPATH -d
echo ""

echo "Test CLI - with perms"
echo ""
echo "$JFSM_PATH $FILEPATH --perms"
$JFSM_PATH $FILEPATH --perms
echo ""
echo "$JFSM_PATH $FILEPATH -p"
$JFSM_PATH $FILEPATH -p
echo ""

echo "Test CLI - with time"
echo ""
echo "$JFSM_PATH $FILEPATH --time"
$JFSM_PATH $FILEPATH --time
echo ""
echo "$JFSM_PATH $FILEPATH -t"
$JFSM_PATH $FILEPATH -t
echo ""

echo "Test CLI - all"
echo ""
echo "$JFSM_PATH $FILEPATH --all"
$JFSM_PATH $FILEPATH --all
echo ""
echo "$JFSM_PATH $FILEPATH -a"
$JFSM_PATH $FILEPATH -a
echo ""

# Test CLI - invalid arguments

echo "Test CLI - invalid argument"
echo ""
echo "$JFSM_PATH $FILEPATH --invalid-argument"
$JFSM_PATH $FILEPATH --invalid-argument
echo ""
echo "$JFSM_PATH $FILEPATH -i"
$JFSM_PATH $FILEPATH -i
echo ""

# Test CLI - invalid file path

echo "Test CLI - invalid file path"
echo ""
echo "$JFSM_PATH /invalid/path/to/file.txt"
$JFSM_PATH /invalid/path/to/file.txt
echo ""

# Test CLI - on a folder
echo "Test CLI - on a folder"
echo ""
echo "$JFSM_PATH $FOLDER -a"
$JFSM_PATH $FOLDER -a
echo ""
echo "stat $FOLDER"
stat $FOLDER
echo ""

# Test CLI - on a subfolder
echo "Test CLI - on a subfolder"
echo ""
echo "$JFSM_PATH $FOLDER/subfolder -a"
$JFSM_PATH $FOLDER/subfolder -a
echo ""
echo "stat $FOLDER/subfolder"
stat $FOLDER/subfolder
echo ""

# Test CLI - on a symlink to a file
echo "Test CLI - on a symlink to a file"
echo ""
echo "$JFSM_PATH $FOLDER/test-symlink-file -a"
$JFSM_PATH $FOLDER/test-symlink-file -a
echo ""
echo "stat $FOLDER/test-symlink-file"
stat $FOLDER/test-symlink-file
echo ""

# Test CLI - on a symlink to a folder
echo "Test CLI - on a symlink to a folder"
echo ""
echo "$JFSM_PATH $FOLDER/test-symlink-subfolder -a"
$JFSM_PATH $FOLDER/test-symlink-subfolder -a
echo ""
echo "stat $FOLDER/test-symlink-subfolder"
stat $FOLDER/test-symlink-subfolder
echo ""

# Test CLI - on a folder with a file with perms (non accessible permissions)
echo "Test CLI - on a folder with a file with permissions"
echo ""
touch $FOLDER/file_with_perms.txt
echo ""
sudo chown root:root $FOLDER/file_with_perms.txt
sudo chmod 000 $FOLDER/file_with_perms.txt
echo ""
echo "$JFSM_PATH $FOLDER/file_with_perms.txt --perms"
$JFSM_PATH $FOLDER/file_with_perms.txt --perms
echo ""
echo "stat $FOLDER/file_with_perms.txt"
stat $FOLDER/file_with_perms.txt
echo ""

sudo rm -rf $FOLDER/file_with_perms.txt

# Removing temporary folder and files
echo "Removing temporary folder and files"
echo ""
rm $FOLDER/test-symlink-subfolder
rm $FOLDER/test-symlink-file
rmdir $FOLDER/subfolder
rm $FILEPATH
rmdir $FOLDER

# Done
echo "All tests completed!"
