#!/bin/bash
# ==============================================
# Crawl URL bằng cách parse HTML directory index
# ==============================================

BASE="https://vmware.digiboy.ir"
URL_LIST="urls.txt"
DIRS_TODO="dirs_todo.txt"
DIRS_DONE="dirs_done.txt"

> "$URL_LIST"
> "$DIRS_DONE"

# Danh sách thư mục cần crawl
cat > "$DIRS_TODO" << 'EOF'
/
/6.X/
/7.X/
/8.X/
/9.X/
/9.X/vCF/
/Omnissa%20Horizon/
/VMware%20Remote%20Console/
/VMware%20Worksation/
/VMwareTools/
EOF

EXTENSIONS="iso|ova|zip|bundle|exe|dmg|tar|pak|spl|img|msi|rar|7z"

crawl_dir() {
    local PATH_URL="$1"
    local FULL_URL="${BASE}${PATH_URL}"

    echo "  Crawling: $FULL_URL"

    # Tải HTML của thư mục
    HTML=$(curl -s --max-time 30 \
        -A "Mozilla/5.0 (X11; Linux x86_64)" \
        "$FULL_URL")

    if [ -z "$HTML" ]; then
        echo "  [WARN] Không lấy được HTML: $FULL_URL"
        return
    fi

    # Lấy tất cả href từ <a href="...">
    echo "$HTML" | grep -oP 'href="[^"]*"' | sed 's/href="//;s/"//' | while read -r HREF; do
        # Bỏ qua link parent, absolute URL ngoài site, anchors
        [[ "$HREF" == ../* ]] && continue
        [[ "$HREF" == /* ]] && continue
        [[ "$HREF" == http* ]] && continue
        [[ "$HREF" == "#"* ]] && continue
        [[ "$HREF" == "?sort"* ]] && continue

        # Decode %XX để kiểm tra extension
        DECODED=$(python3 -c "import urllib.parse; print(urllib.parse.unquote('$HREF'))" 2>/dev/null || echo "$HREF")

        if [[ "$HREF" == */ ]]; then
            # Là thư mục con — thêm vào todo nếu chưa crawl
            SUBDIR="${PATH_URL}${HREF}"
            if ! grep -qF "$SUBDIR" "$DIRS_DONE" 2>/dev/null; then
                echo "$SUBDIR" >> "$DIRS_TODO"
            fi
        elif echo "$DECODED" | grep -qiE "\.(${EXTENSIONS})$"; then
            # Là file cần download
            echo "${BASE}${PATH_URL}${HREF}" >> "$URL_LIST"
            echo "    + $DECODED"
        fi
    done
}

echo "Bắt đầu crawl..."

# Vòng lặp crawl từng thư mục
while IFS= read -r DIR; do
    [[ -z "$DIR" ]] && continue
    if grep -qF "$DIR" "$DIRS_DONE" 2>/dev/null; then
        continue
    fi
    crawl_dir "$DIR"
    echo "$DIR" >> "$DIRS_DONE"

    # Đọc lại DIRS_TODO vì có thể vừa thêm thư mục con
done < <(cat "$DIRS_TODO"; tail -f "$DIRS_TODO") &

TAIL_PID=$!

# Chờ xử lý xong (tối đa 5 phút)
sleep 10
while [ "$(wc -l < "$DIRS_DONE")" -lt "$(wc -l < "$DIRS_TODO")" ]; do
    sleep 3
done
kill $TAIL_PID 2>/dev/null

echo ""
echo "=============================="
echo "Tổng số file tìm được: $(wc -l < $URL_LIST)"
echo "Danh sách lưu tại: $URL_LIST"
