namespace GoogleSheetsScheduleImport;
///
/// Normalized grid: row 0 = location headers (col 0 empty or ignored), column 0 = time labels (row 0 ignored).
///
public sealed class GridSheetModel
{
public required string SheetTitle { get; init; }
/// display values, sanitized hyphens; [row][col]
public required string?[][] Values { get; init; }
/// Optional RGB hex backgrounds for block grouping (#RRGGBB or null)
public required string?[][]? BackgroundKeys { get; init; }
public int RowCount => Values.Length;
public int ColCount => Values.Length == 0 ? 0 : Values[0].Length;
}
public readonly record struct ParsedOccurrenceLine(
string Name,
string Month,
int Day,
string TimeRange,
string Location,
int SourceRowStart,
int SourceRowEnd,
int SourceCol);