using Data.SeaHavenIndustries;
namespace SeaHaven.Services.Implementation
{
///
/// Builds uplift notification email content. Shared by the synchronous request path
/// and the lifecycle sweep so content stays consistent without duplication.
///
public static class UpliftNotificationMessage
{
public static (string Subject, string Body) BuildInitial(Dispatch dispatch, DispatchUpliftRequest req, string vendorName, string frontendBase)
{
var dispatchNum = System.Net.WebUtility.HtmlEncode(dispatch.DispatchNumber ?? "");
var vendor = System.Net.WebUtility.HtmlEncode(vendorName);
var reason = System.Net.WebUtility.HtmlEncode(req.VendorReason ?? "(no reason provided)");
var tierText = req.RequiredTier == 2 ? "Tier 2 (Manager approval required)" : "Tier 1";
var subject = $"[Uplift Request] {dispatch.DispatchNumber} — {vendorName} requests ${req.RequestedNTE:F2} (was ${req.CurrentNTE ?? 0m:F2})";
var body = $@"
Vendor Uplift Request
Dispatch: {dispatchNum}
Vendor: {vendor}
| Current NTE | ${req.CurrentNTE ?? 0m:F2} |
| Requested NTE | ${req.RequestedNTE:F2} |
| Delta | ${(req.RequestedNTE - (req.CurrentNTE ?? 0m)):F2} |
| Required Approval | {tierText} |
Vendor Reason
{reason}
{ReviewLink(dispatch, frontendBase)}";
return (subject, body);
}
public static (string Subject, string Body) BuildEscalation(Dispatch dispatch, DispatchUpliftRequest req, string vendorName, string frontendBase)
{
var dispatchNum = System.Net.WebUtility.HtmlEncode(dispatch.DispatchNumber ?? "");
var vendor = System.Net.WebUtility.HtmlEncode(vendorName);
var tierText = req.RequiredTier == 2 ? "Tier 2 (Manager approval required)" : "Tier 1";
var subject = $"[Escalation] Uplift request awaiting decision — {dispatch.DispatchNumber} ({vendorName})";
var body = $@"
Uplift Request Escalation
An uplift request is still awaiting a decision and has passed the escalation threshold.
Dispatch: {dispatchNum}
Vendor: {vendor}
| Current NTE | ${req.CurrentNTE ?? 0m:F2} |
| Requested NTE | ${req.RequestedNTE:F2} |
| Required Approval | {tierText} |
{ReviewLink(dispatch, frontendBase)}";
return (subject, body);
}
private static string ReviewLink(Dispatch dispatch, string frontendBase)
{
var link = dispatch.WorkOrderId.HasValue
? $"{frontendBase.TrimEnd('/')}/workorders/{dispatch.WorkOrderId.Value}"
: frontendBase;
return $"";
}
}
}