Private/Expand-GlookoMetadata.ps1

# Private helper functions for metadata parsing

function Expand-GlookoMetadata {
    <#
    .SYNOPSIS
        Converts filename and first line content into extended metadata object.
    
    .DESCRIPTION
        Parses filename for dataset/order information and first line for name/date range information.
        Creates a structured metadata object with all parsed fields.
    
    .PARAMETER FileName
        The filename of the CSV file being processed.
    
    .PARAMETER FirstLine
        The first line content from the CSV file.
    
    .OUTPUTS
        PSCustomObject with extended metadata properties.
    #>

    
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$FileName,
        
        [Parameter(Mandatory = $true)]
        [AllowEmptyString()]
        [string]$FirstLine
    )
    
    Write-Verbose "Converting to extended metadata for filename: $FileName"
    Write-Verbose "First line content: '$FirstLine'"
    
    # Extract just the filename without path for parsing and output
    $fileNameOnly = Split-Path -Path $FileName -Leaf
    Write-Verbose "Processing filename: '$fileNameOnly'"
    
    # Parse filename for dataset and order information
    $fileNameParsed = $null
    if ($fileNameOnly -match '^(.+)_data_(\d+)\.csv$') {
        $fileNameParsed = @{
            dataset = $matches[1]
            order = [int]$matches[2]
        }
        Write-Verbose "Filename parsed - Dataset: '$($fileNameParsed.dataset)', Order: $($fileNameParsed.order)"
    } else {
        Write-Verbose "Filename does not match expected pattern"
    }
    
    # Parse first line for name and date range
    $firstLineParsed = $null
    Write-Verbose "Attempting to parse first line: '$FirstLine'"
    if ($FirstLine -match '^Name:(.+?),\s*Date Range:(.+)$') {
        $name = $matches[1].Trim()
        $dateRange = $matches[2].Trim()
        
        Write-Verbose "First line parsed - Name: '$name', DateRange: '$dateRange'"
        
        # Try to parse date range
        $startDate = $null
        $endDate = $null
        if ($dateRange -match '^(\d{4}-\d{2}-\d{2})\s*-\s*(\d{4}-\d{2}-\d{2})$') {
            $startDate = $matches[1]
            $endDate = $matches[2]
            Write-Verbose "Date range parsed - StartDate: '$startDate', EndDate: '$endDate'"
        } else {
            Write-Verbose "Date range does not match expected format"
        }
        
        $firstLineParsed = @{
            Name = $name
            DateRange = $dateRange
            StartDate = $startDate
            EndDate = $endDate
        }
    } else {
        Write-Verbose "First line does not match expected format"
    }
    
    # Create extended metadata object
    $metadata = [PSCustomObject]@{
        FullName = $fileNameOnly
        Dataset = if ($fileNameParsed) { $fileNameParsed.dataset } else { $null }
        Order = if ($fileNameParsed) { $fileNameParsed.order } else { $null }
        Name = if ($firstLineParsed) { $firstLineParsed.Name } else { $null }
        DateRange = if ($firstLineParsed) { $firstLineParsed.DateRange } else { $null }
        StartDate = if ($firstLineParsed) { $firstLineParsed.StartDate } else { $null }
        EndDate = if ($firstLineParsed) { $firstLineParsed.EndDate } else { $null }
        OriginalFirstLine = $FirstLine
    }
    
    Write-Verbose "Extended metadata created successfully"
    return $metadata
}