using Tau.Acuvim.Portal.DTOs; namespace Tau.Acuvim.Portal.Services; // Pure validator for UpsertTariffRequest. Returns null when valid, otherwise an error string. public static class TariffValidator { public static string? Validate(UpsertTariffRequest req) { if (req is null) return "Request body is required."; if (string.IsNullOrWhiteSpace(req.Name)) return "Tariff name is required."; if (req.EffectiveTo.HasValue && req.EffectiveTo.Value < req.EffectiveFrom) return "EffectiveTo must be on or after EffectiveFrom."; if (req.DefaultRatePerKwh < 0) return "DefaultRatePerKwh must be non-negative."; if (req.FixedMonthlyCharge < 0) return "FixedMonthlyCharge must be non-negative."; if (req.VatPercentage < 0 || req.VatPercentage > 100) return "VatPercentage must be 0–100."; foreach (var p in req.Periods) { if (string.IsNullOrWhiteSpace(p.Name)) return "Period name is required."; if (p.DaysOfWeek == 0) return $"Period '{p.Name}' must have at least one day."; if (!TimeOnly.TryParse(p.StartTime, out var start) || !TimeOnly.TryParse(p.EndTime, out var end)) return $"Period '{p.Name}' has invalid times (HH:mm)."; if (start >= end) return $"Period '{p.Name}' StartTime must be before EndTime (no midnight wrap; split the window)."; if (p.RatePerKwh < 0) return $"Period '{p.Name}' RatePerKwh must be non-negative."; } return null; } }