Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

# Load shared utilities
$utilsPath = Join-Path $PSScriptRoot '..\lib\utils.ps1'
. $utilsPath

.\scripts\Windows\starter.ps1
if ($LASTEXITCODE -ne 0) {
    exit $LASTEXITCODE
}

# Shutdown services
Write-Step "Shutting down..."
docker compose down
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Failed to shut down services"
    exit $LASTEXITCODE
}
Write-Success "Services were shut down successfully!"

# Rebuild and start services
Write-Step "Spinning services up with rebuild..."
docker compose up -d --build --wait
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Failed to start services"
    exit $LASTEXITCODE
}
Write-Success "Services are up and healthy!"

# Run pre-run tasks
Write-Step "Completing pre-run tasks..."

Write-Info "  → Running migrations..."
docker compose exec app uv run manage.py migrate --no-input
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Migrations failed"
    exit $LASTEXITCODE
}

Write-Info "  → Initializing..."
docker compose exec app uv run manage.py initialize
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Initialization failed"
    exit $LASTEXITCODE
}

Write-Info "  → Setting default caches..."
docker compose exec app uv run manage.py set_default_caches
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Cache setup failed"
    exit $LASTEXITCODE
}

Write-Info "  → Rebuilding search index..."
docker compose exec app uv run manage.py search_index --rebuild -f
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Search index rebuild failed"
    exit $LASTEXITCODE
}

Write-Info "  → Collecting static files..."
docker compose exec app uv run manage.py collectstatic --clear --no-input
if ($LASTEXITCODE -ne 0) {
    Write-Error-Custom "Static files collection failed"
    exit $LASTEXITCODE
}

Write-Success "Pre-run tasks completed successfully!"

# Cleanup
Write-Step "Cleaning up unused Docker data..."
docker system prune -f
if ($LASTEXITCODE -ne 0) {
    Write-Warning-Custom "Docker cleanup had issues, but continuing..."
}
Write-Success "Unused Docker data cleaned successfully!"

Write-Result ""
Write-Result "All done! eVibes is up and running!"
