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

PROJECT_DIR="$(pwd)"

if [[ ! -f "$PROJECT_DIR/artisan" || ! -f "$PROJECT_DIR/composer.json" ]]; then
  echo "ERROR: Run this script from the Laravel Catalog project root." >&2
  exit 1
fi

STAMP="$(date '+%Y%m%d_%H%M%S')"
OUTPUT_DIR="$HOME/Downloads/SNYT-Unified-Catalog-Review"
STAGE_DIR="$OUTPUT_DIR/laravel-$STAMP"
ARCHIVE="$OUTPUT_DIR/snyt-unified-catalog-laravel-$STAMP.tar.gz"

mkdir -p "$STAGE_DIR/files"

FILES=(
  "routes/api.php"
  "routes/web.php"
  "app/Http/Controllers/Api/Mobile/CatalogController.php"
  "app/Http/Controllers/Api/Mobile/VanStockController.php"
  "app/Http/Controllers/Api/Mobile/CustomerOrderController.php"
  "app/Http/Controllers/Api/Mobile/ManagerController.php"
  "app/Services/FieldSales/CustomerOrderService.php"
  "app/Support/FieldSales/FieldSalesState.php"
  "app/Models/Catalog.php"
  "app/Models/CatalogItem.php"
  "app/Models/Product.php"
  "app/Models/CustomerOrder.php"
  "app/Models/CustomerOrderItem.php"
  "app/Models/VanStockImport.php"
  "app/Models/VanStockItem.php"
  "app/Models/VanStockMovement.php"
  "resources/views/orders/index.blade.php"
  "resources/views/orders/show.blade.php"
  "resources/views/orders/preparation-pdf.blade.php"
  "database/migrations/2026_07_16_020000_create_field_sales_foundation_tables.php"
)

for file in "${FILES[@]}"; do
  if [[ -f "$file" ]]; then
    mkdir -p "$STAGE_DIR/files/$(dirname "$file")"
    cp "$file" "$STAGE_DIR/files/$file"
  else
    printf '%s\n' "$file" >> "$STAGE_DIR/MISSING_FILES.txt"
  fi
done

find database/migrations -maxdepth 1 -type f \
  \( -name '*customer_order*' \
     -o -name '*field_sales*' \
     -o -name '*catalog*' \
     -o -name '*van_stock*' \
     -o -name '*warehouse*' \
     -o -name '*sales_operations*' \) \
  -print0 2>/dev/null |
while IFS= read -r -d '' file; do
  mkdir -p "$STAGE_DIR/files/$(dirname "$file")"
  cp "$file" "$STAGE_DIR/files/$file"
done

{
  echo "=== DATE ==="
  date
  echo
  echo "=== PHP ==="
  php -v
  echo
  echo "=== LARAVEL ==="
  php artisan about
  echo
  echo "=== RELEVANT ROUTES ==="
  php artisan route:list | grep -Ei \
    'mobile.*catalog|mobile.*van-stock|mobile.*orders|manager|warehouse|approval' \
    || true
  echo
  echo "=== RELEVANT MIGRATIONS ==="
  php artisan migrate:status | grep -Ei \
    'field.sales|customer.order|catalog|van.stock|warehouse|sales.operations' \
    || true
  echo
  echo "=== RELEVANT FILE LIST ==="
  find app routes database/migrations resources/views/orders \
    -type f 2>/dev/null |
    grep -Ei \
      'catalog|cart|customer.?order|van.?stock|warehouse|fulfillment|approval|field.?sales' |
    sort
} > "$STAGE_DIR/PROJECT_REPORT.txt" 2>&1

php artisan tinker --execute='
$tables = [
    "products",
    "catalogs",
    "catalog_items",
    "van_stock_imports",
    "van_stock_items",
    "customer_orders",
    "customer_order_items",
    "van_stock_movements",
];

foreach ($tables as $table) {
    echo PHP_EOL."=== ".$table." ===".PHP_EOL;

    if (! \Illuminate\Support\Facades\Schema::hasTable($table)) {
        echo "MISSING".PHP_EOL;
        continue;
    }

    foreach (\Illuminate\Support\Facades\Schema::getColumns($table) as $column) {
        echo $column["name"]
            ." | ".($column["type_name"] ?? $column["type"] ?? "")
            ." | nullable=".json_encode($column["nullable"] ?? null)
            ." | default=".json_encode($column["default"] ?? null)
            .PHP_EOL;
    }
}
' > "$STAGE_DIR/DATABASE_SCHEMA.txt" 2>&1

{
  echo "SNYT Unified Catalog / Mixed Fulfillment Laravel Review"
  echo
  echo "This archive contains source code and database schema only."
  echo "It intentionally excludes:"
  echo "- .env"
  echo "- database contents"
  echo "- customer/order records"
  echo "- access tokens"
  echo "- uploaded product images"
  echo "- logs"
  echo "- signing keys"
} > "$STAGE_DIR/README.txt"

if find "$STAGE_DIR" -type f \
  \( -name '.env' -o -name '*.key' -o -name '*.pem' -o -name '*.jks' \) |
  grep -q .
then
  echo "ERROR: A sensitive file entered the review package." >&2
  rm -rf "$STAGE_DIR"
  exit 2
fi

tar -czf "$ARCHIVE" -C "$STAGE_DIR" .

echo
echo "===================================================="
echo " LARAVEL REVIEW PACKAGE CREATED"
echo "===================================================="
echo "$ARCHIVE"

if command -v open >/dev/null 2>&1; then
  open "$OUTPUT_DIR"
fi
