namespace BomLocalService.Utilities;
public static class LocationHelper
{
///
/// Creates a location key from suburb and state (e.g., "Pomona_QLD")
///
public static string GetLocationKey(string suburb, string state)
{
return $"{suburb}_{state}";
}
///
/// Sanitizes a filename by removing invalid characters and replacing spaces/commas
///
public static string SanitizeFileName(string fileName)
{
var invalidChars = Path.GetInvalidFileNameChars();
return string.Join("_", fileName.Split(invalidChars, StringSplitOptions.RemoveEmptyEntries))
.Replace(" ", "_")
.Replace(",", "");
}
///
/// Parses suburb and state from a cache filename (format: Suburb_State_YYYYMMDD_HHMMSS.png)
/// Returns null if parsing fails
///
public static (string suburb, string state)? ParseLocationFromFilename(string fileName)
{
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
var parts = fileNameWithoutExtension.Split('_');
if (parts.Length >= 2)
{
return (parts[0], parts[1]);
}
return null;
}
///
/// Parses timestamp from a cache filename (format: Suburb_State_YYYYMMDD_HHMMSS.png)
/// Returns null if parsing fails
///
public static DateTime? ParseTimestampFromFilename(string fileName)
{
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
var parts = fileNameWithoutExtension.Split('_');
if (parts.Length >= 3)
{
// Last two parts should be date and time
var dateTimeStr = $"{parts[^2]}_{parts[^1]}";
if (DateTime.TryParseExact(dateTimeStr, "yyyyMMdd_HHmmss", null, System.Globalization.DateTimeStyles.None, out var fileTime))
{
return fileTime;
}
}
return null;
}
}