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

REPO_ROOT="/var/www/repo"
DEBS_ROOT="$REPO_ROOT/debs"
POOL_DIR="$REPO_ROOT/pool"
DISTS_DIR="$REPO_ROOT/dists"

COMPONENTS=("RootHide" "Rootless")

# 清空旧 pool 和 dists
rm -rf "$POOL_DIR" "$DISTS_DIR"
mkdir -p "$POOL_DIR" "$DISTS_DIR/stable"

for comp in "${COMPONENTS[@]}"; do
  mkdir -p "$DEBS_ROOT/$comp"
  mkdir -p "$DISTS_DIR/stable/$comp"
done

# 处理每个组件
for comp in "${COMPONENTS[@]}"; do
  comp_debs="$DEBS_ROOT/$comp"

  if [ -d "$comp_debs" ]; then
    for deb in "$comp_debs"/*.deb; do
      [ -e "$deb" ] || continue

      arch=$(dpkg-deb -f "$deb" Architecture 2>/dev/null | tr -d '[:space:]')
      [ -z "$arch" ] && arch="iphoneos-arm"

      mkdir -p "$POOL_DIR/$comp/$arch"
      cp "$deb" "$POOL_DIR/$comp/$arch/"
      echo "packaged: $comp/$(basename "$deb") -> $arch"
    done
  fi

  if [ -d "$POOL_DIR/$comp" ]; then
    for pooldir in "$POOL_DIR/$comp"/*/; do
      [ -d "$pooldir" ] || continue
      arch=$(basename "$pooldir")
      outdir="$DISTS_DIR/stable/$comp/binary-$arch"
      mkdir -p "$outdir"

      (
        cd "$REPO_ROOT"
        dpkg-scanpackages -m "pool/$comp/$arch" /dev/null > "$outdir/Packages"
      )

      gzip -9c "$outdir/Packages" > "$outdir/Packages.gz"
      echo "generated: $comp/binary-$arch"
    done
  fi
done

# 收集所有架构
ARCHS=$(find "$POOL_DIR" -mindepth 2 -maxdepth 2 -type d -printf '%f ' | sort -u)
[ -z "$ARCHS" ] && ARCHS="iphoneos-arm"

# 生成 Release
(
  cd "$REPO_ROOT"
  apt-ftparchive \
    -o APT::FTPArchive::Release::Origin="gmcnmm Repo" \
    -o APT::FTPArchive::Release::Label="gmcnmm Repo" \
    -o APT::FTPArchive::Release::Suite="stable" \
    -o APT::FTPArchive::Release::Codename="stable" \
    -o "APT::FTPArchive::Release::Architectures=$ARCHS" \
    -o "APT::FTPArchive::Release::Components=RootHide Rootless" \
    release dists/stable > dists/stable/Release
)

echo "Repo built"

# 生成根目录入口，供 Sileo 优先识别
ARCHS_FLAT=$(find "$POOL_DIR" -mindepth 2 -maxdepth 2 -type d -printf '%f ' | sort -u)
[ -z "$ARCHS_FLAT" ] && ARCHS_FLAT="iphoneos-arm"

cat > "$REPO_ROOT/Release" <<EOF
Origin: gmcnmm Repo
Label: gmcnmm Repo
Suite: stable
Version: 1.0
Codename: stable
Architectures: ${ARCHS_FLAT}
Components: RootHide Rootless
Description: gmcnmm Repo
EOF

: > "$REPO_ROOT/Packages"

for p in "$DISTS_DIR"/stable/RootHide/binary-*/Packages "$DISTS_DIR"/stable/Rootless/binary-*/Packages; do
  [ -f "$p" ] && cat "$p" >> "$REPO_ROOT/Packages"
done
gzip -9c "$REPO_ROOT/Packages" > "$REPO_ROOT/Packages.gz"

echo "flat entry generated"
