#!/bin/bash

set -e

echo "🚀 Starting Laravel Wedding Guest Management System Setup..."

# 備份自訂檔案
echo "📦 Backing up custom files..."
mkdir -p /tmp/wedding-backup

# 全量備份（避免中途失敗導致檔案遺失）
# 注意：此備份僅存在容器內 /tmp
echo "🧯 Creating full backup archive..."
tar -C /var/www/html -czf /tmp/wedding-backup/full-backup.tgz . 2>/dev/null || true

cp -r /var/www/html/app /tmp/wedding-backup/ 2>/dev/null || true
cp -r /var/www/html/database /tmp/wedding-backup/ 2>/dev/null || true
cp -r /var/www/html/resources /tmp/wedding-backup/ 2>/dev/null || true
cp -r /var/www/html/routes /tmp/wedding-backup/ 2>/dev/null || true
cp -r /var/www/html/docs /tmp/wedding-backup/ 2>/dev/null || true
cp /var/www/html/AGENTS.md /tmp/wedding-backup/ 2>/dev/null || true
cp /var/www/html/package.json /tmp/wedding-backup/ 2>/dev/null || true
cp /var/www/html/package-lock.json /tmp/wedding-backup/ 2>/dev/null || true
cp /var/www/html/README.md /tmp/wedding-backup/ 2>/dev/null || true

# 建立 Laravel 專案在臨時目錄
echo "📦 Creating Laravel 11 project in temp directory..."
cd /tmp
rm -rf laravel-temp
composer create-project laravel/laravel:^11.0 laravel-temp --prefer-dist --no-interaction

cd laravel-temp

# 安全檢查：確保建立成功，避免後續清空掛載目錄
if [ ! -f "/tmp/laravel-temp/composer.json" ]; then
  echo "❌ Laravel temp project creation failed: /tmp/laravel-temp/composer.json not found"
  echo "   A full backup was saved at: /tmp/wedding-backup/full-backup.tgz"
  exit 1
fi

echo "📦 Installing Filament 3.0..."
composer require filament/filament:"^3.0" --no-interaction

echo "📦 Installing Excel export package..."
composer require maatwebsite/excel --no-interaction

echo "📦 Installing PDF export package..."
composer require barryvdh/laravel-dompdf --no-interaction

echo "📦 Installing permission management package..."
composer require spatie/laravel-permission --no-interaction

echo "📦 Installing Laravel Breeze with React..."
composer require laravel/breeze --dev --no-interaction
php artisan breeze:install react --no-interaction

echo "📦 Installing frontend dependencies..."
npm install

echo "🔧 Configuring environment..."
cp .env.example .env
php artisan key:generate

# 更新 .env 設定
sed -i 's/DB_CONNECTION=sqlite/DB_CONNECTION=mysql/' .env
sed -i 's/# DB_HOST=127.0.0.1/DB_HOST=db/' .env
sed -i 's/# DB_PORT=3306/DB_PORT=3306/' .env
sed -i 's/# DB_DATABASE=laravel/DB_DATABASE=wedding_guest_management/' .env
sed -i 's/# DB_USERNAME=root/DB_USERNAME=wedding_user/' .env
sed -i 's/# DB_PASSWORD=/DB_PASSWORD=password/' .env

echo "" >> .env
echo "APP_NAME=\"婚禮賓客管理系統\"" >> .env
echo "APP_LOCALE=zh_TW" >> .env
echo "APP_TIMEZONE=Asia/Taipei" >> .env
echo "QUEUE_CONNECTION=database" >> .env

echo "🎨 Initializing Filament..."
php artisan filament:install --panels --no-interaction

# 複製到目標目錄
echo "📁 Copying Laravel project to /var/www/html..."
cd /var/www/html
# 保留 docker 相關檔案
mkdir -p /tmp/docker-backup
cp -r docker /tmp/docker-backup/ 2>/dev/null || true
cp docker-compose.yml /tmp/docker-backup/ 2>/dev/null || true
cp Dockerfile /tmp/docker-backup/ 2>/dev/null || true
cp .dockerignore /tmp/docker-backup/ 2>/dev/null || true
cp DOCKER_README.md /tmp/docker-backup/ 2>/dev/null || true

# 清空目錄（保留 .git 如果有的話）
echo "🧹 Clearing project directory (preserving .git if present)..."
shopt -s dotglob nullglob
for item in /var/www/html/* /var/www/html/.[!.]* /var/www/html/..?*; do
  if [ "$(basename "$item")" = ".git" ]; then
    continue
  fi
  rm -rf "$item"
done
shopt -u dotglob nullglob

# 複製 Laravel 專案（包含 dotfiles；避免 cp /.* 造成 . / .. 問題）
echo "📁 Copying Laravel skeleton into project directory..."
cp -a /tmp/laravel-temp/. /var/www/html/

# 還原 docker 檔案
cp -r /tmp/docker-backup/docker . 2>/dev/null || true
cp /tmp/docker-backup/docker-compose.yml . 2>/dev/null || true
cp /tmp/docker-backup/Dockerfile . 2>/dev/null || true
cp /tmp/docker-backup/.dockerignore . 2>/dev/null || true
cp /tmp/docker-backup/DOCKER_README.md . 2>/dev/null || true

# 還原自訂檔案
echo "📁 Restoring custom files..."

# 還原 Models
cp /tmp/wedding-backup/app/Models/Guest.php app/Models/ 2>/dev/null || true
cp /tmp/wedding-backup/app/Models/AccompanyingGuest.php app/Models/ 2>/dev/null || true
cp /tmp/wedding-backup/app/Models/Table.php app/Models/ 2>/dev/null || true
cp /tmp/wedding-backup/app/Models/GiftRecord.php app/Models/ 2>/dev/null || true

# 還原 Controllers
mkdir -p app/Http/Controllers
cp /tmp/wedding-backup/app/Http/Controllers/RsvpController.php app/Http/Controllers/ 2>/dev/null || true

# 還原 Form Requests
mkdir -p app/Http/Requests
cp /tmp/wedding-backup/app/Http/Requests/RsvpStoreRequest.php app/Http/Requests/ 2>/dev/null || true
cp /tmp/wedding-backup/app/Http/Requests/RsvpUpdateRequest.php app/Http/Requests/ 2>/dev/null || true

# 還原 Filament Resources
mkdir -p app/Filament/Resources/GuestResource/Pages
cp -r /tmp/wedding-backup/app/Filament/Resources/GuestResource.php app/Filament/Resources/ 2>/dev/null || true
cp -r /tmp/wedding-backup/app/Filament/Resources/GuestResource/ app/Filament/Resources/ 2>/dev/null || true

# 還原 Widgets
mkdir -p app/Filament/Widgets
cp /tmp/wedding-backup/app/Filament/Widgets/StatsOverview.php app/Filament/Widgets/ 2>/dev/null || true

# 還原 Migrations
cp /tmp/wedding-backup/database/migrations/2026_02_01_000001_create_guests_table.php database/migrations/ 2>/dev/null || true
cp /tmp/wedding-backup/database/migrations/2026_02_01_000002_create_accompanying_guests_table.php database/migrations/ 2>/dev/null || true
cp /tmp/wedding-backup/database/migrations/2026_02_01_000003_create_tables_table.php database/migrations/ 2>/dev/null || true
cp /tmp/wedding-backup/database/migrations/2026_02_01_000004_create_gift_records_table.php database/migrations/ 2>/dev/null || true

# 還原 Factory & Seeder
cp /tmp/wedding-backup/database/factories/GuestFactory.php database/factories/ 2>/dev/null || true
mkdir -p database/seeders
cp /tmp/wedding-backup/database/seeders/GuestSeeder.php database/seeders/ 2>/dev/null || true

# 還原 React Components
mkdir -p resources/js/Pages/Rsvp/Components
cp -r /tmp/wedding-backup/resources/js/Pages/Rsvp/ resources/js/Pages/ 2>/dev/null || true

# 還原 Routes
cp /tmp/wedding-backup/routes/web.php routes/ 2>/dev/null || true

# 還原 docs / 其他專案文件
cp -r /tmp/wedding-backup/docs ./ 2>/dev/null || true
cp /tmp/wedding-backup/AGENTS.md . 2>/dev/null || true
cp /tmp/wedding-backup/package.json . 2>/dev/null || true
cp /tmp/wedding-backup/package-lock.json . 2>/dev/null || true

# 還原 README
cp /tmp/wedding-backup/README.md . 2>/dev/null || true

# 設定權限
echo "🔒 Setting permissions..."
chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache

# 建立資料庫表
echo "🗄️  Setting up database..."
php artisan queue:table
php artisan migrate --force

echo "✅ Setup completed successfully!"
echo ""
echo "📝 Next steps:"
echo "   1. Create Filament admin user: docker compose exec app php artisan make:filament-user"
echo "   2. Build frontend assets: docker compose exec app npm run build"
echo "   3. Access application at: http://localhost:8000"
echo "   4. Access Filament admin at: http://localhost:8000/admin"
echo "   5. Access phpMyAdmin at: http://localhost:8080"
echo ""
echo "🎉 Enjoy your Wedding Guest Management System!"
