#!/usr/bin/env bash
set -euo pipefail

show_help() {
  cat <<'EOF'
ARGUS Unified Build System - Image Build Tool

Usage: $0 [OPTIONS]

Options:
  --intranet        Use intranet mirror for log/bind builds
  --master-offline  Build master offline image (requires src/master/offline_wheels.tar.gz)
  -h, --help        Show this help message

Examples:
  $0                             # Build with default sources
  $0 --intranet                  # Build with intranet mirror
  $0 --master-offline            # Additionally build argus-master:offline
  $0 --intranet --master-offline
EOF
}

use_intranet=false
build_master_offline=false

while [[ $# -gt 0 ]]; do
  case $1 in
    --intranet)
      use_intranet=true
      shift
      ;;
    --master-offline)
      build_master_offline=true
      shift
      ;;
    -h|--help)
      show_help
      exit 0
      ;;
    *)
      echo "Unknown option: $1" >&2
      show_help
      exit 1
      ;;
  esac
done

root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$root"

master_root="$root/src/master"
master_offline_tar="$master_root/offline_wheels.tar.gz"
master_offline_dir="$master_root/offline_wheels"

if [[ "$build_master_offline" == true ]]; then
  if [[ ! -f "$master_offline_tar" ]]; then
    echo "❌ offline wheels tar not found: $master_offline_tar" >&2
    echo "   请提前准备好 offline_wheels.tar.gz 后再执行 --master-offline" >&2
    exit 1
  fi
  echo "📦 Preparing offline wheels for master (extracting $master_offline_tar)"
  rm -rf "$master_offline_dir"
  mkdir -p "$master_offline_dir"
  tar -xzf "$master_offline_tar" -C "$master_root"
  has_wheel=$(find "$master_offline_dir" -maxdepth 1 -type f -name '*.whl' -print -quit)
  if [[ -z "$has_wheel" ]]; then
    echo "❌ offline_wheels extraction failed或无 wheel: $master_offline_dir" >&2
    exit 1
  fi
fi

echo "======================================="
echo "ARGUS Unified Build System"
echo "======================================="

if [[ "$use_intranet" == true ]]; then
  echo "🌐 Mode: Intranet (Using internal mirror: 10.68.64.1)"
  build_args="--build-arg USE_INTRANET=true"
else
  echo "🌐 Mode: Public (Using default package sources)"
  build_args=""
fi

echo "📁 Build context: $root"
echo ""

build_image() {
  local image_name=$1
  local dockerfile_path=$2
  local tag=$3
  local extra_args=$4

  echo "🔄 Building $image_name image..."
  echo "   Dockerfile: $dockerfile_path"
  echo "   Tag: $tag"

  if docker build $build_args $extra_args -f "$dockerfile_path" -t "$tag" .; then
    echo "✅ $image_name image built successfully"
    return 0
  else
    echo "❌ Failed to build $image_name image"
    return 1
  fi
}

images_built=()
build_failed=false

if build_image "Elasticsearch" "src/log/elasticsearch/build/Dockerfile" "argus-elasticsearch:latest" ""; then
  images_built+=("argus-elasticsearch:latest")
else
  build_failed=true
fi

echo ""

if build_image "Kibana" "src/log/kibana/build/Dockerfile" "argus-kibana:latest" ""; then
  images_built+=("argus-kibana:latest")
else
  build_failed=true
fi

echo ""

if build_image "BIND9" "src/bind/build/Dockerfile" "argus-bind9:latest" ""; then
  images_built+=("argus-bind9:latest")
else
  build_failed=true
fi

echo ""

if [[ "$build_master_offline" == true ]]; then
  echo "🏗️  Building master offline image"
  pushd "$master_root" >/dev/null
  if ./scripts/build_images.sh --offline --tag argus-master:offline; then
    images_built+=("argus-master:offline")
  else
    build_failed=true
  fi
  popd >/dev/null
fi

echo "======================================="
echo "📦 Build Summary"
echo "======================================="

if [[ ${#images_built[@]} -gt 0 ]]; then
  echo "✅ Successfully built images:"
  for image in "${images_built[@]}"; do
    echo "   • $image"
  done
fi

if [[ "$build_failed" == true ]]; then
  echo ""
  echo "❌ Some images failed to build. Please check the errors above."
  exit 1
fi

if [[ "$use_intranet" == true ]]; then
  echo ""
  echo "🌐 Built with intranet mirror configuration"
fi

if [[ "$build_master_offline" == true ]]; then
  echo ""
  echo "🧳 Master offline wheels 已解压到 $master_offline_dir"
fi

echo ""
echo "🚀 Next steps:"
echo "   ./build/save_images.sh --compress          # 导出镜像"
echo "   cd src/master/tests && MASTER_IMAGE_TAG=argus-master:offline ./scripts/00_e2e_test.sh"
echo ""
