#!/bin/bash

LOG_DIR="/home/honney/.log"
LOG_FILE="${LOG_DIR}/rename.log"

mkdir -p "$LOG_DIR"

reverse_mode=false

if [[ "$1" == "reverse" ]]; then
    reverse_mode=true
elif [[ -z "$1" ]]; then
    echo "Usage: $0 {start_number} | reverse"
    exit 1
fi

if $reverse_mode; then
    if [[ ! -f "$LOG_FILE" ]]; then
        echo "No log file found. Nothing to reverse."
        exit 1
    fi

    current_dir=$(realpath .)
    match_start=$(grep -n "=== $current_dir ===" "$LOG_FILE" | cut -d: -f1)

    if [[ -z "$match_start" ]]; then
        echo "No entries for this directory in the log."
        exit 1
    fi

    sed -n "$((match_start + 1)),/^===/p" "$LOG_FILE" | grep -v "^===" | while IFS="|" read -r original renamed; do
        if [[ -e "$renamed" ]]; then
            mv -v "$renamed" "$original"
        else
            echo "Warning: '$renamed' not found. Skipping."
        fi
    done

    echo "Reversal complete."
    exit 0
fi

# Start of normal renaming
start_number=$1
counter=0

extensions=("mkv" "mp4" "avi" "mov" "jpg" "png")

files=()
for ext in "${extensions[@]}"; do
    while IFS= read -r -d '' file; do
        files+=("$file")
    done < <(find . -maxdepth 1 -type f -iname "*.${ext}" -print0)
done

IFS=$'\n' sorted_files=($(printf '%s\n' "${files[@]}" | sort -rz | tr '\0' '\n'))

# Log the current session
current_dir=$(realpath .)
echo "=== $current_dir ===" >> "$LOG_FILE"

for file in "${sorted_files[@]}"; do
    new_number=$(printf "%02d" $((start_number + counter)))
    extension="${file##*.}"
    base_name="E${new_number}"
    new_name="${base_name}.${extension}"
    suffix=1

    # Avoid overwriting
    while [ -e "$new_name" ]; do
        new_name="${base_name}_$suffix.${extension}"
        ((suffix++))
    done

    mv "$file" "$new_name"
    echo "${file}|${new_name}" >> "$LOG_FILE"
    ((counter++))
done

echo "Renaming complete! Changes logged to $LOG_FILE"
