using SessionZero.SzfLib.Helpers; namespace SessionZero.SzfLib.Parser; public class SzfField(string name, SzfFieldType type) { public string Name { get; set; } = name; public SzfFieldType SzfType { get; set; } = type; public string? Value { get; set; } /// /// Validates the field based on its type and value. Returns an SzfError object containing validation results, if any. /// /// /// public SzfError Validate(bool canHaveEmptyValue = false) { SzfError result = new(); if (string.IsNullOrEmpty(Name)) { result.AddError("Field name cannot be null or empty."); } if (!canHaveEmptyValue && string.IsNullOrEmpty(Value)) { result.AddError($"Field '{Name}' cannot be empty."); } else { var isValid = ValidateSzfType(this); if (!isValid) { result.AddError($"Field '{Name}' has an invalid value for type '{SzfType}'."); } } return result; } /// /// Validates the value of the field based on its SzfType. /// /// /// private bool ValidateSzfType(SzfField field) { var modifiedValue = field.Value?.Trim().ToLower(); switch (field.SzfType) { case SzfFieldType.Text: return !string.IsNullOrEmpty(modifiedValue); case SzfFieldType.TextField: return !string.IsNullOrEmpty(modifiedValue); case SzfFieldType.Number: if (decimal.TryParse(modifiedValue, out _)) return true; break; case SzfFieldType.Bool: if (bool.TryParse(modifiedValue, out _)) return true; break; case SzfFieldType.Calculated: // TODO: Implement validation for calculated fields // For now, we assume they are valid if they are not empty return !string.IsNullOrEmpty(modifiedValue); case SzfFieldType.EntryReference: // Currently, we assume entry references are valid if they are not empty return !string.IsNullOrEmpty(modifiedValue); case SzfFieldType.EntryReferenceList: // Currently, we assume entry reference lists are valid if they are not empty return !string.IsNullOrEmpty(modifiedValue); case SzfFieldType.System: // System fields are typically predefined and may not require validation return true; } return false; } }