param(
    [string]$MigrationName
)

if (!$MigrationName) {
    exit 1
}

$ErrorActionPreference = "Stop"


function Replace-LineInFile($FilePath, $MatchPattern, $ReplaceLineWith, $MaxCount = -1){
    $FullPath = (Get-Item -Path $FilePath).FullName
    [string[]]$Content = Get-Content -Path $FullPath
    $Count = 0
    for ($i = 0; $i -lt $Content.Length; $i++)
    {
        if ($Content[$i] -ne $null -and $Content[$i].Contains($MatchPattern)) {
            $Content[$i] = $ReplaceLineWith
            $Count++
        }
        if ($MaxCount -gt 0 -and $Count -ge $MaxCount) {
            break
        }
    }
    [System.IO.File]::WriteAllLines($FullPath, $Content)
}


if ($PSScriptRoot) {
    $Root = (Get-Item -Path $PSScriptRoot).Parent.FullName + "\Server"
}
else {
    $Root = (Get-Item -Path (Get-Location).Path).Parent.FullName + "\Server"
}

Push-Location "$Root"

Replace-LineInFile -FilePath "$Root\appsettings.json" -MatchPattern '"DBProvider":' -ReplaceLineWith '    "DBProvider": "SQLite",' -MaxCount 1

dotnet ef database update $MigrationName --context "SqliteDbContext"

Replace-LineInFile -FilePath "$Root\appsettings.json" -MatchPattern '"DBProvider":' -ReplaceLineWith '    "DBProvider": "SQLServer",' -MaxCount 1

dotnet ef database update $MigrationName --context "SqlServerDbContext"

Replace-LineInFile -FilePath "$Root\appsettings.json" -MatchPattern '"DBProvider":' -ReplaceLineWith '    "DBProvider": "PostgreSQL",' -MaxCount 1

dotnet ef database update $MigrationName --context "PostgreSqlDbContext"

Replace-LineInFile -FilePath "$Root\appsettings.json" -MatchPattern '"DBProvider":' -ReplaceLineWith '    "DBProvider": "SQLite",' -MaxCount 1

Pop-Location