# Gate 4: Complete Host Startup Sequence
# AGENTS.md v16.0 Strategic Automation
# Prerequisites: SSH tunnel open, DbUp migrations applied

param(
    [switch]$SkipDbUp = $false,
    [string]$Environment = "Debug"
)

Write-Host "=== Gate 4: Host Startup Sequence ===" -ForegroundColor Green
Write-Host "Environment: $Environment (Debug = DevelopmentHeaderAuthenticationHandler)" -ForegroundColor Cyan
Write-Host ""

# Step 1: Verify Prerequisites
Write-Host "[1/3] Verifying prerequisites..." -ForegroundColor Yellow

# Check PostgreSQL connection
try {
    $testConn = New-Object System.Net.Sockets.TcpClient
    $testConn.Connect("localhost", 5432)
    $testConn.Close()
    Write-Host "  ✅ PostgreSQL available (localhost:5432)" -ForegroundColor Green
}
catch {
    Write-Host "  ❌ PostgreSQL not accessible. Start SSH tunnel:" -ForegroundColor Red
    Write-Host "     ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7" -ForegroundColor Yellow
    exit 1
}

# Check .NET SDK
$dotnetVersion = dotnet --version
Write-Host "  ✅ .NET SDK available ($dotnetVersion)" -ForegroundColor Green

# Step 2: Run Migrations (if not skipped)
if (-not $SkipDbUp) {
    Write-Host "[2/3] Running database migrations..." -ForegroundColor Yellow
    $env:KARTSELL_POSTGRES = "Host=localhost;Port=5432;Database=kartsell;Username=kartsell;Password=kartsell"

    try {
        dotnet run --project src/KArtSell.DbMigrator -c Release --no-build
        Write-Host "  ✅ Migrations applied successfully" -ForegroundColor Green
    }
    catch {
        Write-Host "  ⚠️  Migration warning: $_" -ForegroundColor Yellow
    }
}

# Step 3: Start Host
Write-Host "[3/3] Starting Host (DEBUG mode)..." -ForegroundColor Yellow
Write-Host ""

# Set required environment variables (must match appsettings.json)
$env:ASPNETCORE_ENVIRONMENT = "Development"  # Load appsettings.Development.json (DevelopmentHeaderAuthenticationHandler)
$env:KARTSELL_POSTGRES = "Host=127.0.0.1;Port=5432;Database=kartselldb;Username=kartsell;Password=kartsell4321@!"
$env:KRX_API_KEY = "stub-key-for-testing"
$env:OPENDART_API = "stub-key-for-testing"

# Display startup info
Write-Host "Configuration: $Environment" -ForegroundColor Cyan
Write-Host "Expected output: 'Now listening on: http://127.0.0.1:5002'" -ForegroundColor Cyan
Write-Host ""
Write-Host "Press Ctrl+C to stop." -ForegroundColor Gray
Write-Host ""

# Launch Host
dotnet run --project src/KArtSell.Host --configuration $Environment --no-build

Write-Host ""
Write-Host "Host stopped." -ForegroundColor Yellow
