# Test database directly to see if it's corrupted or locked
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)

Write-Host "[OK] Mounting AD2 C$ share..." -ForegroundColor Green
New-PSDrive -Name AD2 -PSProvider FileSystem -Root "\\192.168.0.6\C$" -Credential $cred -ErrorAction Stop | Out-Null

$dbPath = "AD2:\Shares\testdatadb\database\testdata.db"

Write-Host "[OK] Testing database file access..." -ForegroundColor Green

# Test 1: File exists and readable
if (Test-Path $dbPath) {
    Write-Host "  [OK] Database file exists" -ForegroundColor Green

    $dbFile = Get-Item $dbPath
    Write-Host "  [OK] Size: $([math]::Round($dbFile.Length/1MB,2)) MB" -ForegroundColor Cyan
    Write-Host "  [OK] Modified: $($dbFile.LastWriteTime)" -ForegroundColor Cyan
} else {
    Write-Host "  [ERROR] Database file not found!" -ForegroundColor Red
    Remove-PSDrive -Name AD2
    exit 1
}

# Test 2: Check file lock
Write-Host "`n[OK] Checking if file is locked..." -ForegroundColor Green
try {
    $stream = [System.IO.File]::Open($dbFile.FullName, 'Open', 'Read', 'ReadWrite')
    $stream.Close()
    Write-Host "  [OK] File is not locked" -ForegroundColor Green
} catch {
    Write-Host "  [WARNING] File may be locked by another process" -ForegroundColor Yellow
    Write-Host "  Error: $($_.Exception.Message)" -ForegroundColor Yellow
}

# Test 3: Check file header (SQLite magic bytes)
Write-Host "`n[OK] Checking SQLite file header..." -ForegroundColor Green
try {
    $bytes = [System.IO.File]::ReadAllBytes($dbFile.FullName) | Select-Object -First 16
    $header = [System.Text.Encoding]::ASCII.GetString($bytes)

    if ($header.StartsWith("SQLite format 3")) {
        Write-Host "  [OK] Valid SQLite database header detected" -ForegroundColor Green
    } else {
        Write-Host "  [ERROR] Invalid SQLite header! Database may be corrupted" -ForegroundColor Red
        Write-Host "  Header bytes: $($bytes -join ' ')" -ForegroundColor Yellow
    }
} catch {
    Write-Host "  [ERROR] Cannot read database file: $($_.Exception.Message)" -ForegroundColor Red
}

# Test 4: Check permissions
Write-Host "`n[OK] Checking file permissions..." -ForegroundColor Green
$acl = Get-Acl $dbPath
Write-Host "  Owner: $($acl.Owner)" -ForegroundColor Cyan
Write-Host "  Access Rules:" -ForegroundColor Cyan
$acl.Access | ForEach-Object {
    Write-Host "    $($_.IdentityReference): $($_.FileSystemRights) ($($_.AccessControlType))" -ForegroundColor Gray
}

# Test 5: Check if there are journal files
Write-Host "`n[OK] Checking for journal files..." -ForegroundColor Green
$journalFile = Get-Item "$($dbFile.DirectoryName)\testdata.db-journal" -ErrorAction SilentlyContinue
if ($journalFile) {
    Write-Host "  [FOUND] Journal file exists: $([math]::Round($journalFile.Length/1KB,2)) KB" -ForegroundColor Yellow
    Write-Host "  [WARNING] This may indicate incomplete transaction or crash" -ForegroundColor Yellow
} else {
    Write-Host "  [OK] No journal file (clean state)" -ForegroundColor Green
}

Remove-PSDrive -Name AD2 -ErrorAction SilentlyContinue
Write-Host "`n[OK] Done" -ForegroundColor Green
