#!/bin/bash

SRC_DIR="2st"
DST_DIR="3st"
LIST_FILE="c.txt"

mkdir -p "$DST_DIR"

########################################
# 1️⃣ 시작 번호 결정
########################################
if [ -n "$1" ]; then
    START_INDEX="$1"
else
    # 기존 DST_DIR 파일 중 최대 번호 + 1
    MAX_NUM=0
    for f in "$DST_DIR"/*.jpg; do
        [ -e "$f" ] || continue
        BASENAME=$(basename "$f" .jpg)
        if [[ "$BASENAME" =~ ^[0-9]+(_[0-9]+)?$ ]]; then
            NUM=${BASENAME%%_*}
            if [ "$NUM" -gt "$MAX_NUM" ]; then
                MAX_NUM="$NUM"
            fi
        fi
    done
    START_INDEX=$((MAX_NUM + 1))
fi

echo "Start index: $START_INDEX"

########################################
# 2️⃣ 3st 디렉토리 초기화
########################################
rm -f "$DST_DIR"/*.jpg

########################################
# 3️⃣ c.txt 읽어서 파일 복사 + 존재 여부 체크
########################################
COPIED_FILES=()

while read -r NUM; do
    # 대소문자 구분 없이 파일 검색
    FILE=$(find "$SRC_DIR" -maxdepth 1 -iname "${NUM}.jpg" | head -n1)

    if [ -n "$FILE" ]; then
        cp -- "$FILE" "$DST_DIR/"
        COPIED_FILES+=("$(basename "$FILE")")
        echo "Copied: $(basename "$FILE")"
    else
        echo "Warning: ${NUM}.jpg not found."
    fi
done < "$LIST_FILE"

if [ ${#COPIED_FILES[@]} -eq 0 ]; then
    echo "No files copied. Exiting."
    exit 1
fi

########################################
# 4️⃣ 시간순 정렬 (EXIF 또는 파일 수정 시간)
########################################
cd "$DST_DIR" || exit 1

TMP_LIST="/tmp/sorted_$$.txt"
> "$TMP_LIST"

for f in *.jpg; do
    [ -f "$f" ] || continue
    DATETIME=$(exiftool -s3 -DateTimeOriginal "$f")
    if [ -z "$DATETIME" ]; then
        DATETIME=$(date -r "$f" "+%Y:%m:%d %H:%M:%S")
    fi
    echo -e "${DATETIME}\t${f}" >> "$TMP_LIST"
done

sort "$TMP_LIST" -o "$TMP_LIST"

########################################
# 5️⃣ 시간순 이름 재부여 + 동일 초 처리 (시간 순 보장)
########################################
INDEX="$START_INDEX"
PREV_TIME=""
DUP_COUNT=0

while IFS=$'\t' read -r DATETIME FILE; do
    # 동일 시간 처리
    if [ "$DATETIME" = "$PREV_TIME" ]; then
        DUP_COUNT=$((DUP_COUNT + 1))
    else
        DUP_COUNT=0
    fi

    # 기본 새 이름
    if [ "$DUP_COUNT" -eq 0 ]; then
        NEWNAME="${INDEX}.jpg"
    else
        NEWNAME="${INDEX}_${DUP_COUNT}.jpg"
    fi

    # DST_DIR 내 이름 중복 방지
    while [ -e "$NEWNAME" ]; do
        DUP_COUNT=$((DUP_COUNT + 1))
        NEWNAME="${INDEX}_${DUP_COUNT}.jpg"
    done

    mv -- "$FILE" "$NEWNAME"

    PREV_TIME="$DATETIME"
    INDEX=$((INDEX + 1))
done < "$TMP_LIST"

########################################
# 6️⃣ '_숫자' 제거 후 파일명 정리
########################################
for f in *.jpg; do
    [ -f "$f" ] || continue

    # '_' 뒤 숫자를 제거
    if [[ "$f" =~ ^([0-9]+)_[0-9]+\.jpg$ ]]; then
        NEWNAME="${BASH_REMATCH[1]}.jpg"

        # 이름 중복 방지: 이미 존재하면 덮어쓰기 방지
        if [ "$NEWNAME" != "$f" ]; then
            COUNT=1
            BASE="${BASH_REMATCH[1]}"
            while [ -e "$NEWNAME" ]; do
                NEWNAME="${BASE}_${COUNT}.jpg"
                COUNT=$((COUNT + 1))
            done
            mv -- "$f" "$NEWNAME"
        fi
    fi
done
