#!/usr/bin/env pwsh

Write-Host "Starting Langflow build and run process..." -ForegroundColor Green

# Check if .env file exists and set env file parameter
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
$projectRoot = Resolve-Path (Join-Path $scriptDir "..\..")
$envPath = Join-Path $projectRoot ".env"
$useEnvFile = $false
if (Test-Path $envPath) {
    Write-Host "Found .env file at: $envPath" -ForegroundColor Cyan
    $useEnvFile = $true
} else {
    Write-Host ".env file not found at: $envPath" -ForegroundColor Yellow
    Write-Host "Langflow will use default configuration" -ForegroundColor Yellow
}

# Step 1: Install frontend dependencies
Write-Host "`nStep 1: Installing frontend dependencies..." -ForegroundColor Yellow
try {
    Set-Location "..\..\src\frontend"
    Write-Host "Running npm install..."
    npm install
    if ($LASTEXITCODE -ne 0) {
        throw "npm install failed"
    }
} catch {
    Write-Host "Error in frontend dependency installation: $_" -ForegroundColor Red
    Read-Host "Press Enter to exit"
    exit 1
}

# Step 2: Build frontend
Write-Host "`nStep 2: Building frontend..." -ForegroundColor Yellow
try {
    Write-Host "Running npm run build..."
    npm run build
    if ($LASTEXITCODE -ne 0) {
        throw "npm run build failed"
    }
} catch {
    Write-Host "Error in frontend build: $_" -ForegroundColor Red
    Read-Host "Press Enter to exit"
    exit 1
}

# Step 3: Copy build files
Write-Host "`nStep 3: Copying build files to backend..." -ForegroundColor Yellow
try {
    Set-Location "..\.."

    # Determine build directory
    $buildDir = if (Test-Path "src\frontend\build") {
        "src\frontend\build"
    } elseif (Test-Path "src\frontend\dist") {
        "src\frontend\dist"
    } else {
        throw "Neither build nor dist directory found in src\frontend"
    }

    $targetDir = "src\backend\base\langflow\frontend"
    Write-Host "Copying from $buildDir to $targetDir"

    # Create target directory if it doesn't exist
    if (-not (Test-Path $targetDir)) {
        New-Item -Path $targetDir -ItemType Directory -Force | Out-Null
    }

    # Remove existing files in target directory (FORCES CLEAN REPLACEMENT)
    Write-Host "Removing existing files from target directory..." -ForegroundColor Cyan
    if (Test-Path "$targetDir\*") {
        Remove-Item "$targetDir\*" -Recurse -Force
    }

    # Copy all files from build directory
    Copy-Item "$buildDir\*" -Destination $targetDir -Recurse -Force
    Write-Host "Build files copied successfully!" -ForegroundColor Green

} catch {
    Write-Host "Error copying files: $_" -ForegroundColor Red
    Read-Host "Press Enter to exit"
    exit 1
}

# Step 4: Run Langflow
Write-Host "`nStep 4: Running Langflow..." -ForegroundColor Yellow
Write-Host "`nAttention: Wait until uvicorn is running before opening the browser" -ForegroundColor Red
try {
    # Change to project root directory for uv
    Set-Location $projectRoot
    if ($useEnvFile) {
        Write-Host "Using env file: .env" -ForegroundColor Cyan
        & uv run --env-file ".env" langflow run
    } else {
        & uv run langflow run
    }
} catch {
    Write-Host "Error running langflow: $_" -ForegroundColor Red
    Read-Host "Press Enter to exit"
    exit 1
}

Write-Host "`nLangflow build and run process completed!" -ForegroundColor Green
Read-Host "Press Enter to exit"