#!/bin/bash

# Configuration for Orion O6
SYNC_FOLDER="/home/seedbox-sync/"
SYNC_TMP_DOWNLOAD_FOLDER="${SYNC_FOLDER}Downloads"
SERIES_FOLDER="/home/film/Series/"
DRY_RUN=false

# 1. Help message
if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
    echo "Usage: $0 [OPTIONS]"
    echo "Sorts and hardlinks series from $SYNC_FOLDER to $SERIES_FOLDER"
    echo ""
    echo "Options:"
    echo "  -n, --dry-run  Show what would be done without making changes"
    echo "  -h, --help     Show this help message"
    echo ""
    echo "Manual trigger (recommended via sorting service):"
    echo "  sudo systemctl start orion-media-sort.service"
    exit 0
fi

# Change to a neutral directory
cd /

LN_PATH=$(which ln)
MKDIR_PATH=$(which mkdir)

while [[ $# -gt 0 ]]; do
    case "$1" in
        -n|--dry-run)
            DRY_RUN=true
            shift
            ;;
        *)
            echo "Unknown option: $1" >&2
            exit 1
            ;;
    esac
done

# Ensure Series folder exists
if [ ! -d "${SERIES_FOLDER}" ]; then
    echo "⚠️  Series folder ${SERIES_FOLDER} does not exist. Skipping sorting."
    exit 0
fi

find "${SERIES_FOLDER}" -maxdepth 1 -mindepth 1 -type d -print0 |
while IFS= read -r -d '' SerieFolder
do
    SerieName=$(basename "${SerieFolder}")
    SearchPattern=$(echo "${SerieName}" | sed 's/ /\.\?/g')
    echo -e "Searching for Serie : ${SerieName}"

    find "${SYNC_FOLDER}" -mindepth 1 \( -path "${SYNC_TMP_DOWNLOAD_FOLDER}" -prune \) -o -type f ! -name ".*" -iregex ".*${SearchPattern}.*" -print0 |
    while IFS= read -r -d '' EpisodePath
    do
        EpisodeFile=$(basename "${EpisodePath}")
        EpisodeExt=${EpisodeFile##*.}
        
        EpisodeSeason=$(echo "${EpisodeFile}" | sed 's|.*[Ss]\([0-9]\+\)[^0-9].*|0\1|g' | sed 's|^0\+||g')
        EpisodeNumberRaw=$(echo "${EpisodeFile}" | sed 's|.*[Ee]\([0-9]\+\)[^0-9].*|0\1|g' | sed 's|^0\+||g')

        if [[ -n "${EpisodeSeason}" && -n "${EpisodeNumberRaw}" && "${EpisodeNumberRaw}" =~ ^[0-9]+$ ]]
        then
            EpisodeNumber=$(printf "E%02d" "${EpisodeNumberRaw}")
            SeasonFolder=$(printf "S%02d" "${EpisodeSeason}")

            CleanSerieName=$(echo "${SerieName}" | sed 's| |_|g')
            NewFileName="${CleanSerieName}_${SeasonFolder}${EpisodeNumber}.${EpisodeExt}"
            NewFilePath="${SerieFolder}/${SeasonFolder}/${NewFileName}"

            if [ ! -f "${NewFilePath}" ]
            then
                SeasonFolderPath=$(dirname "${NewFilePath}")
                if [ ! -d "${SeasonFolderPath}" ]
                then
                    echo "  -> Creating Season folder: ${SeasonFolderPath}"
                    if [ "${DRY_RUN}" = false ]
                    then
                        "${MKDIR_PATH}" -m 2775 -p "${SeasonFolderPath}"
                    fi
                fi
                
                if [ "${DRY_RUN}" = false ]
                then
                    echo "  -> Linking: ${NewFilePath} -> ${EpisodePath}"
                    "${LN_PATH}" "${EpisodePath}" "${NewFilePath}"
                else
                    echo "  -> [DRY-RUN] Would link: ${NewFilePath} -> ${EpisodePath}"
                fi
            fi
        else
            echo "  -> Warning: Could not extract season/episode from: '${EpisodeFile}'"
        fi
    done
done
