Classes/SubtitleEntry.ps1

class SubtitleEntry {
    [int]       $Index       # 1-based sequence position after parsing
    [TimeSpan]  $Start       # Parsed start time (canonical internal unit)
    [TimeSpan]  $End         # Parsed end time
    [string[]]  $Lines       # Text lines — array preserves multi-line entries
    [string]    $RawText     # Original unparsed text block for lossless round-trip
    [hashtable] $Metadata    # Extension bag for format-specific extras

    SubtitleEntry() {
        $this.Metadata = @{}
        $this.Lines    = @()
    }

    [TimeSpan] Duration() {
        return $this.End - $this.Start
    }

    [string] Text() {
        return $this.Lines -join "`n"
    }

    [string] ToString() {
        return '[{0}] {1} --> {2} : {3}' -f $this.Index, $this.Start, $this.End, ($this.Lines -join ' ')
    }
}