#!/bin/bash
set -e

OUTPUT_DIR="${1:-.}"
REQUESTED_ARCH="${2:-}"

if [ -n "$REQUESTED_ARCH" ]; then
    ARCH="$REQUESTED_ARCH"
else
    ARCH=$(uname -m)
fi

echo "=========================================="
echo "Downloading Miniconda for Python 3.11"
echo "Architecture: ${ARCH}"
echo "Output directory: ${OUTPUT_DIR}"
echo "=========================================="

MINICONDA_VERSION="26.1.1-1"

if [ "$ARCH" = "x86_64" ]; then
    MINICONDA_FILE="Miniconda3-py311_${MINICONDA_VERSION}-Linux-x86_64.sh"
elif [ "$ARCH" = "aarch64" ]; then
    MINICONDA_FILE="Miniconda3-py311_${MINICONDA_VERSION}-Linux-aarch64.sh"
else
    echo "ERROR: Unsupported architecture: $ARCH"
    echo "Supported architectures: x86_64, aarch64"
    exit 1
fi

MIRROR_URLS=(
    "https://repo.anaconda.com/miniconda/${MINICONDA_FILE}"
    "https://repo.huaweicloud.com/anaconda/miniconda/${MINICONDA_FILE}"
)

mkdir -p "${OUTPUT_DIR}"

cd "${OUTPUT_DIR}"

if [ -f "${MINICONDA_FILE}" ]; then
    FILE_SIZE=$(stat -c%s "${MINICONDA_FILE}" 2>/dev/null || stat -f%z "${MINICONDA_FILE}" 2>/dev/null)
    if [ "$FILE_SIZE" -gt 50000000 ]; then
        echo ">>> File already exists and looks valid: ${MINICONDA_FILE} (${FILE_SIZE} bytes)"
        echo ">>> Skipping download. Delete the file if you want to re-download."
    else
        echo ">>> Existing file seems too small (${FILE_SIZE} bytes), re-downloading..."
        rm -f "${MINICONDA_FILE}"
    fi
fi

if [ ! -f "${MINICONDA_FILE}" ]; then
    DOWNLOAD_SUCCESS=false
    for MINICONDA_URL in "${MIRROR_URLS[@]}"; do
        echo ">>> Downloading ${MINICONDA_FILE}..."
        echo ">>> URL: ${MINICONDA_URL}"

        if wget -c "${MINICONDA_URL}"; then
            FILE_SIZE=$(stat -c%s "${MINICONDA_FILE}" 2>/dev/null || stat -f%z "${MINICONDA_FILE}" 2>/dev/null)
            if [ "$FILE_SIZE" -gt 50000000 ]; then
                echo ">>> Download completed successfully! (${FILE_SIZE} bytes)"
                DOWNLOAD_SUCCESS=true
                break
            else
                echo ">>> Downloaded file too small (${FILE_SIZE} bytes), trying next mirror..."
                rm -f "${MINICONDA_FILE}"
            fi
        else
            echo ">>> Download failed from ${MINICONDA_URL}, trying next mirror..."
            rm -f "${MINICONDA_FILE}"
        fi
    done

    if [ "$DOWNLOAD_SUCCESS" = false ]; then
        echo ">>> ERROR: All download mirrors failed!"
        exit 1
    fi
fi

if [ -f "${MINICONDA_FILE}" ]; then
    FILE_SIZE=$(stat -c%s "${MINICONDA_FILE}" 2>/dev/null || stat -f%z "${MINICONDA_FILE}" 2>/dev/null)
    echo ">>> File size: ${FILE_SIZE} bytes"
fi

echo "=========================================="
echo "Miniconda downloaded successfully!"
echo "File: ${OUTPUT_DIR}/${MINICONDA_FILE}"
echo "=========================================="
echo ""
echo "Next steps:"
echo "  1. Verify the file: bash ${MINICONDA_FILE} --help"
echo "  2. Use it to build Docker image:"
echo "     bash build.sh -t A3 -m ${OUTPUT_DIR}/${MINICONDA_FILE}"