modules/solution/Write-Readme.ps1

param(
    [string]$ProjectName,
    [string]$OrmMode,
    [string]$DbProvider,
    [string]$FrontendMode,
    [string[]]$Entities,
    [string]$OutputPath,
    [bool]$SkipFrontend  = $false,
    [bool]$SkipTests     = $false,
    [bool]$SkipCi        = $false,
    [switch]$Observability,
    [string]$CiProvider  = "GitHub"
)

. (Join-Path (Split-Path $MyInvocation.MyCommand.Path) "..\core\Utils.ps1")

# --- Proje yapisi (ASCII agac) ---
$tree  = "$ProjectName/`n"
$tree += " src/`n"
$tree += " $ProjectName.Domain/ # Entity'ler, arayuzler, is kurallari`n"
$tree += " $ProjectName.Application/ # Use case'ler, CQRS handler'lar, DTO'lar`n"
$tree += " $ProjectName.Infrastructure/ # Harici servisler, kimlik dogrulama`n"
$tree += " $ProjectName.Persistence/ # Veritabani erisimi ($OrmMode)`n"
$tree += " $ProjectName.WebApi/ # REST API, controller'lar, middleware`n"
if (-not $SkipTests) {
    $tree += " tests/`n"
    $tree += " $ProjectName.Domain.Tests/`n"
    $tree += " $ProjectName.Application.Tests/`n"
    $tree += " $ProjectName.Integration.Tests/`n"
}
if (-not $SkipFrontend) {
    $tree += " frontend/ # $FrontendMode uygulamasi`n"
}
$tree += " docker-compose.yml"

# --- Teknoloji tablosu ---
$techTable  = "| Katman | Teknoloji |`n"
$techTable += "|---------------|--------------------------------|`n"
$techTable += "| Backend | .NET 8, ASP.NET Core |`n"
$techTable += "| ORM | $OrmMode |`n"
$techTable += "| Veritabani | $DbProvider |`n"
if (-not $SkipFrontend) { $techTable += "| Frontend | $FrontendMode |`n" }
$techTable += "| Auth | JWT Bearer |"
if ($Observability) { $techTable += "`n| Logging | Serilog + OpenTelemetry |" }

# --- Baglanti dizesi ---
$dbConnectionString = switch ($DbProvider) {
    "MSSQL"    { "Server=localhost;Database=$ProjectName;Trusted_Connection=True;TrustServerCertificate=True" }
    "Postgres" { "Host=localhost;Database=$ProjectName;Username=postgres;Password=your_password" }
    "SQLite"   { "Data Source=$ProjectName.db" }
}

# --- Migration bolumu ---
$migrationSection = ""
if ($OrmMode -ne "Dapper") {
    $migrationSection = @"

## Veritabani Migration

``````bash
dotnet ef migrations add InitialCreate --project src/$ProjectName.Persistence --startup-project src/$ProjectName.WebApi
dotnet ef database update --project src/$ProjectName.Persistence --startup-project src/$ProjectName.WebApi
``````
"@

}

# --- Frontend bolumu ---
$frontendSection = ""
if (-not $SkipFrontend) {
    $frontendSection = @"

## Frontend

Framework: **$FrontendMode**

``````bash
cd frontend
npm install
npm run dev
``````

> Varsayilan adres: http://localhost:5173
"@

}

# --- CI bolumu ---
$ciSection = ""
if (-not $SkipCi) {
    $ciFile = switch ($CiProvider) {
        "GitHub" { ".github/workflows/ci.yml" }
        "GitLab" { ".gitlab-ci.yml" }
        default  { "" }
    }
    if ($ciFile) {
        $ciSection = @"

## CI/CD

$CiProvider pipeline: ``$ciFile``

Her push ve pull request'te otomatik build + test calisir.
"@

    }
}

# --- Observability bolumu ---
$obsSection = ""
if ($Observability) {
    $obsSection = @"

## Observability

- **Serilog** ile yapilandirilmis loglama
- **OpenTelemetry** ile tracing ve metrics
"@

}

# --- Entity listesi ---
$entityList = ($Entities | ForEach-Object { "- ``$_``" }) -join "`n"

# --- Gereksinimler ---
$prereqs = "- .NET 8 SDK"
if (-not $SkipFrontend) { $prereqs += "`n- Node.js 18+" }
if ($DbProvider -eq "MSSQL")    { $prereqs += "`n- SQL Server (veya Docker)" }
if ($DbProvider -eq "Postgres") { $prereqs += "`n- PostgreSQL (veya Docker)" }

$content = @"
# $ProjectName

Clean Architecture tabanli .NET 8 projesi. Bu proje **Clean Architecture Template Generator** ile olusturulmustur.

## Proje Yapisi

``````
$tree
``````

## Teknoloji Yigini

$techTable

## Entity'ler

$entityList

## Baslangic

### Gereksinimler

$prereqs

### Backend

``````bash
# Baglanti dizesini ayarla
# src/$ProjectName.WebApi/appsettings.json icinde:
# "ConnectionStrings": { "DefaultConnection": "$dbConnectionString" }

dotnet restore
dotnet build
dotnet run --project src/$ProjectName.WebApi
``````

> Swagger UI: http://localhost:5000/swagger
$frontendSection
$migrationSection

## Kimlik Dogrulama

JWT tabanli kimlik dogrulama kullanilmaktadir.

### Varsayilan Kullanici (Seed)

| Alan | Deger |
|----------|------------|
| Kullanici Adi | ``admin`` |
| Sifre | ``Admin123!`` |

> Uretim ortaminda bu sifreyi degistirin.

### Giris Akisi

1. ``POST /api/auth/login`` -- Kullanici adi ve sifre ile token alin
2. Swagger'da **Authorize** butonuna tiklayin ve ``Bearer <token>`` girin
3. ``POST /api/auth/register`` -- Yeni kullanici olusturmak icin
$ciSection
$obsSection

## Docker ile Calistirma

``````bash
docker compose up -d --build
``````
"@


Write-CoreFile (Join-Path $OutputPath "README.md") $content