$SourceFilePath = $args[0]
$ChunkSize = $args[1]
$Offset = $args[2]

# Function to create chunk file
function Create-ChunkFile {
    param (
        [byte[]]$ChunkData,
        [int]$ChunkNumber
    )

    $chunkFileName = Join-Path $subDir ("{0}_{1:D5}.bin" -f [System.IO.Path]::GetFileNameWithoutExtension($SourceFilePath), $ChunkNumber)
    [System.IO.File]::WriteAllBytes($chunkFileName, $ChunkData)
}

# Create subdirectory named after the source file (without extension) for chunks
$subDir = Join-Path ([System.IO.Path]::GetDirectoryName($SourceFilePath)) ([System.IO.Path]::GetFileNameWithoutExtension($SourceFilePath))
if (!(Test-Path -Path $subDir)) {
    New-Item -ItemType Directory -Path $subDir
}

# Read the binary data from the file
$data = [System.IO.File]::ReadAllBytes($SourceFilePath)
$dataLength = $data.Length
$chunkNumber = 0

# Adjust the start position based on the offset
$startPosition = [Math]::Min($Offset, $dataLength)

# Process chunks
for ($i = $startPosition; $i -lt $dataLength; $i += $ChunkSize) {
    $chunkEnd = [Math]::Min($i + $ChunkSize, $dataLength)
    $chunkData = $data[$i..($chunkEnd - 1)]
    Create-ChunkFile -ChunkData $chunkData -ChunkNumber $chunkNumber
    $chunkNumber++
}