Public/Initialize-LeadForge.ps1

function Initialize-LeadForge {
    <#
    .SYNOPSIS
        Interactive first-run setup wizard for LeadForge.
    .DESCRIPTION
        Walks the user through:
        1. AI provider API key configuration
        2. Owner profile creation/selection
        3. Optional search/enrichment API keys
        4. Connectivity validation
    .EXAMPLE
        Initialize-LeadForge
    .EXAMPLE
        Initialize-LeadForge -SkipValidation
    #>

    [CmdletBinding()]
    param(
        [switch]$SkipValidation
    )

    Write-Host "`n═══════════════════════════════════════════════════════════════" -ForegroundColor Cyan
    Write-Host " LeadForge — First-Run Setup" -ForegroundColor Cyan
    Write-Host "═══════════════════════════════════════════════════════════════`n" -ForegroundColor Cyan

    $moduleRoot = $PSScriptRoot | Split-Path -Parent
    $profilesDir = Join-Path $moduleRoot 'profiles'

    # --- Step 1: AI Provider ---
    Write-Host " [1/4] AI Provider Configuration" -ForegroundColor White
    Write-Host " LeadForge needs an AI provider for email analysis and research." -ForegroundColor Gray
    Write-Host ""

    $providers = @(
        @{ Name = 'OpenAI'; EnvVar = 'OPENAI_API_KEY'; SecretName = 'openai-api-key' }
        @{ Name = 'Anthropic'; EnvVar = 'ANTHROPIC_API_KEY'; SecretName = 'anthropic-api-key' }
        @{ Name = 'Gemini'; EnvVar = 'GEMINI_API_KEY'; SecretName = 'gemini-api-key' }
    )

    $configuredProviders = @()
    foreach ($p in $providers) {
        $hasKey = [bool][Environment]::GetEnvironmentVariable($p.EnvVar)
        if (-not $hasKey -and (Get-Command Get-PCSecret -ErrorAction SilentlyContinue)) {
            $hasKey = [bool](Get-PCSecret -Name $p.SecretName -ErrorAction SilentlyContinue)
        }

        $status = if ($hasKey) { '[OK]' } else { '[--]' }
        $color = if ($hasKey) { 'Green' } else { 'DarkGray' }
        Write-Host " $status $($p.Name)" -ForegroundColor $color

        if ($hasKey) { $configuredProviders += $p.Name }
    }

    if ($configuredProviders.Count -eq 0) {
        Write-Host ""
        Write-Host " No AI provider configured!" -ForegroundColor Red
        Write-Host " Set at least one API key:" -ForegroundColor Yellow
        Write-Host ' $env:OPENAI_API_KEY = "sk-..."' -ForegroundColor Gray
        Write-Host ' $env:ANTHROPIC_API_KEY = "sk-ant-..."' -ForegroundColor Gray
        Write-Host ' $env:GEMINI_API_KEY = "AIza..."' -ForegroundColor Gray
        Write-Host ""
        Write-Host " Or use PowerCraft.Secrets:" -ForegroundColor Gray
        Write-Host " Set-PCSecret -Name 'openai-api-key' -Value 'sk-...'" -ForegroundColor Gray
        Write-Host ""
    }
    else {
        Write-Host " Providers ready: $($configuredProviders -join ', ')" -ForegroundColor Green
    }

    # --- Step 2: Owner Profile ---
    Write-Host ""
    Write-Host " [2/4] Owner Profile" -ForegroundColor White
    Write-Host " Profiles define your identity (domains to exclude) and scoring weights." -ForegroundColor Gray
    Write-Host ""

    $existingProfiles = @()
    if (Test-Path $profilesDir) {
        $existingProfiles = Get-ChildItem $profilesDir -Filter '*.json' | Select-Object -ExpandProperty BaseName
    }

    if ($existingProfiles.Count -gt 0) {
        Write-Host " Available profiles:" -ForegroundColor Gray
        foreach ($prof in $existingProfiles) {
            Write-Host " - $prof" -ForegroundColor Cyan
        }
    }
    else {
        Write-Host " No profiles found. Create one at: $profilesDir\Default.json" -ForegroundColor Yellow
    }

    # --- Step 3: Search/Enrichment APIs (optional) ---
    Write-Host ""
    Write-Host " [3/4] Search & Enrichment APIs (optional)" -ForegroundColor White
    Write-Host " These enable contact research via web search and website scraping." -ForegroundColor Gray
    Write-Host ""

    $optionalApis = @(
        @{ Name = 'Brave Search'; EnvVar = 'BRAVE_SEARCH_API_KEY' }
        @{ Name = 'Firecrawl'; EnvVar = 'FIRECRAWL_API_KEY' }
    )

    foreach ($api in $optionalApis) {
        $hasKey = [bool][Environment]::GetEnvironmentVariable($api.EnvVar)
        $status = if ($hasKey) { '[OK]' } else { '[--]' }
        $color = if ($hasKey) { 'Green' } else { 'DarkGray' }
        Write-Host " $status $($api.Name)" -ForegroundColor $color
    }

    # --- Step 4: Validation ---
    Write-Host ""
    Write-Host " [4/4] Validation" -ForegroundColor White

    if (-not $SkipValidation -and $configuredProviders.Count -gt 0) {
        Write-Host " Testing provider connectivity..." -ForegroundColor Gray

        if (Get-Command Test-PCProvider -ErrorAction SilentlyContinue) {
            foreach ($name in $configuredProviders) {
                $providerKey = $name.ToLower()
                $ok = Test-PCProvider -Name $providerKey -WarningAction SilentlyContinue
                $status = if ($ok) { '[OK]' } else { '[!!]' }
                $color = if ($ok) { 'Green' } else { 'Red' }
                Write-Host " $status $name connectivity" -ForegroundColor $color
            }
        }
        else {
            Write-Host " (PowerCraft.AI not loaded — skipping live validation)" -ForegroundColor DarkGray
        }
    }
    elseif ($SkipValidation) {
        Write-Host " Skipped (-SkipValidation)" -ForegroundColor DarkGray
    }
    else {
        Write-Host " No providers to test" -ForegroundColor DarkGray
    }

    # --- Summary ---
    Write-Host ""
    Write-Host "═══════════════════════════════════════════════════════════════" -ForegroundColor Cyan
    Write-Host " Setup Summary" -ForegroundColor Cyan
    Write-Host "═══════════════════════════════════════════════════════════════" -ForegroundColor Cyan
    Write-Host " AI Providers: $($configuredProviders.Count)/3 configured" -ForegroundColor $(if ($configuredProviders.Count -gt 0) { 'Green' } else { 'Red' })
    Write-Host " Profiles: $($existingProfiles.Count) available" -ForegroundColor $(if ($existingProfiles.Count -gt 0) { 'Green' } else { 'Yellow' })
    Write-Host " Search APIs: $(($optionalApis | Where-Object { [Environment]::GetEnvironmentVariable($_.EnvVar) }).Count)/2 configured" -ForegroundColor Gray
    Write-Host ""

    if ($configuredProviders.Count -gt 0 -and $existingProfiles.Count -gt 0) {
        Write-Host " Ready to run:" -ForegroundColor Green
        Write-Host ' Invoke-LeadForge -Path "./emails" -Profile Default' -ForegroundColor White
    }
    else {
        Write-Host " Action needed:" -ForegroundColor Yellow
        if ($configuredProviders.Count -eq 0) {
            Write-Host " - Configure at least one AI provider API key" -ForegroundColor Yellow
        }
        if ($existingProfiles.Count -eq 0) {
            Write-Host " - Create a scoring profile in $profilesDir" -ForegroundColor Yellow
        }
    }
    Write-Host ""
}