@page "/vas" @rendermode InteractiveServer @using System.Collections.Generic @using System.Linq @using System.Threading.Tasks
@* Page Header Area *@

Value-Added Services (VAS)

Global destination intelligence, live travel risk feeds, and premium VIP traveller concierge support

@* Alert / Feedback Notification Banner *@ @if (!string.IsNullOrEmpty(AlertFeedback)) {
@AlertFeedback
} @* Quick intelligence overview widgets *@
@foreach (var dest in IntelligentDestinations) {

@dest.City, @dest.CountryCode

Traveller: @dest.Traveller

@dest.WeatherEmoji
@dest.Temperature°C
@dest.WeatherCondition Local time: @dest.LocalTime
Visa Requirement: @dest.VisaStatus
Health Warning: @dest.HealthWarning
Global Safety Risk: @dest.RiskLevel
}
@* Risk Advisories and Services Splitting grid *@
@* Live Travel Advisories Feed - Left Column (lg:col-span-7) *@

Global Safety & Risk Feed

Real-time alerts synced through TMT global risk metrics and WMO meteorology bulletins

@foreach (var alert in FilteredRiskAlerts) {
@if (alert.Severity == "Critical") { } else if (alert.Severity == "Warning") { } else { }

@alert.Title

@alert.PublishedTime

@alert.Description

Category: @alert.Category
}
Alert definitions are updated dynamically via real-time international GDS PNR telemetry streams.
@* Value-added Services At a Glance - Right Column (lg:col-span-5) *@

Always-On Concierge Services

Select a capability to simulate corporate booking and guidelines

@* Tile 1: Airport VIP Lounge *@

Airport Lounges

Pre-book SLOW & international Bidvest airport lounges.

@* Tile 2: Shuttle Transfer Calcs *@

Shuttle Transfers

Calculate airport transfers, shuttles & express trains.

@* Tile 3: Places of Interest *@

Culture Guides

Corporate travel orientations & localized city guides.

@* Tile 4: Health Warnings Tracker *@

Health & Vaccines

WHO, CDC Yellow Fever certificate lookup checker.

@* Travel Help Desk Assistance Box *@
Premium Support

24/7 Global Emergency Assistance

If a traveller gets stranded, requires flight changes, or encounters medical events, our emergency assistance room handles all fast-tracks instantly.

Local Help-desk 0800 TMT HELP
International Hotline +27 82 555 4400
@* ===================== MODAL DIALOGS ===================== *@ @* 1. Book VIP Lounge & Concierge Modal *@ @if (ShowVipBookingModal) {

Book Premium VIP Services

Fast-track security and airport lounge clearance for SAQA travellers

SAQA Travel Policy Check

Airport lounge clearances are automatically covered for executive travellers. Other staff require line-manager travel authorization justification files linked to their PO.

} @* 2. Public Transport & Shuttle Calculator Modal *@ @if (ShowShuttleModal) {

Airport Shuttle Transfer Calculator

Calculate corporate transfers vs. public options at destination

@{ var options = GetTransferOptions(SelectedCalcCity); }
Cost Comparison Matrix (converted to ZAR)
@foreach (var opt in options) {
@opt.Name Time: @opt.Duration
R @opt.ZarCost.ToString("N0") @opt.Type
}

TMT Recommendations:

Our preferred corporate shuttle transfers provide meet & greet in the terminal arrivals hall, reducing delays and offering bill-back directly to the corporate travel card.

} @* 3. Culture Guidelines Modal *@ @if (ShowCultureModal) {

Travel Orientation & Cultural Guidelines

Empowering corporate travellers with destination intelligence and local advice

United Kingdom (London Orientation)

Always keep to the left on tube escalators to avoid delays. Mobile contactless is widely accepted across all public transport. Standard tipping is 10-12.5% on meals if service charge is not already included. Safe and well-lit walking spaces throughout.

Kenya (Nairobi Orientation)

M-Pesa mobile money is universal; ask the help-desk on how to set it up prior to landing. Avoid carrying excess physical cash or wearing flashy items. Pre-arranged hotel transport or Uber is highly recommended for late-night airport transfers.

South Africa (Cape Town Orientation)

Local microclimate weather shifts can occur quickly; packing lightweight warm layers is ideal. Use pre-arranged airport transfer shuttles rather than flagging roadside cabs. High alert on security awareness in localized central sectors after hours.

} @* 4. Health Warnings Tracker & Vaccine Requirements *@ @if (ShowHealthTrackerModal) {

Health & Vaccine Checklist Portal

Pre-travel health screening for SAQA corporate compliance

International Yellow Card

SAQA travellers returning from East Africa, West Africa or South America require a physical Yellow Fever vaccine certificate logged on checkout.

Nairobi, Kenya

Yellow Fever vaccination certificate mandatory upon landing. Malaria prophylaxis is strongly advised for excursions outside urban Nairobi.

United Kingdom & Schengen Area

No special vaccine cards or malaria restrictions required. General healthcare reciprocal frameworks apply for travel insurance files.

United Arab Emirates (Dubai)

Ensure any special prescription medicine is logged on official SAQA Support channels beforehand, as UAE customs maintains strict medical framework checklists.

} @code { // Model Definitions public class DestinationGuide { public string City { get; set; } = string.Empty; public string CountryCode { get; set; } = string.Empty; public string Traveller { get; set; } = string.Empty; public string WeatherEmoji { get; set; } = string.Empty; public int Temperature { get; set; } public string WeatherCondition { get; set; } = string.Empty; public string LocalTime { get; set; } = string.Empty; public string VisaStatus { get; set; } = string.Empty; public string HealthWarning { get; set; } = string.Empty; public string RiskLevel { get; set; } = string.Empty; } public class GlobalRiskAlert { public int Id { get; set; } public string Title { get; set; } = string.Empty; public string PublishedTime { get; set; } = string.Empty; public string Severity { get; set; } = "Info"; // Critical, Warning, Info public string Category { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; } public class AirportTransferOpt { public string Name { get; set; } = string.Empty; public string Duration { get; set; } = string.Empty; public decimal ZarCost { get; set; } public string Type { get; set; } = string.Empty; // Train, Shuttle, Cab } // Core States private string AlertFeedback { get; set; } = string.Empty; private string SelectedAlertFilter { get; set; } = "All"; // Modals Control private bool ShowVipBookingModal { get; set; } = false; private bool ShowShuttleModal { get; set; } = false; private bool ShowCultureModal { get; set; } = false; private bool ShowHealthTrackerModal { get; set; } = false; // Vip booking form states private string VipSelectedTraveller { get; set; } = "J. Mokoena"; private string VipSelectedAirport { get; set; } = "OR Tambo (JNB)"; private string VipServiceLevel { get; set; } = "Fast-track + Lounge"; private DateTime VipFlightDate { get; set; } = new DateTime(2026, 6, 2); // Shuttle calculator states private string SelectedCalcCity { get; set; } = "London"; // Databases private List IntelligentDestinations { get; set; } = new(); private List SafetyAlerts { get; set; } = new(); // Filtered Risk Alerts derived properties private IEnumerable FilteredRiskAlerts => SelectedAlertFilter == "All" ? SafetyAlerts : SelectedAlertFilter == "Critical" ? SafetyAlerts.Where(a => a.Severity == "Critical") : SafetyAlerts.Where(a => a.Severity == "Warning" || a.Severity == "Info"); protected override void OnInitialized() { // Populate standard intelligence trackers matching React seed database IntelligentDestinations = new List { new DestinationGuide { City = "London", CountryCode = "UK", Traveller = "T. Maluleke", WeatherEmoji = "☁️", Temperature = 14, WeatherCondition = "Light drizzle, windy", LocalTime = "10:15 AM BST", VisaStatus = "Standard Visa", HealthWarning = "None active", RiskLevel = "Low" }, new DestinationGuide { City = "Nairobi", CountryCode = "KE", Traveller = "A. Dlamini", WeatherEmoji = "⛅", Temperature = 22, WeatherCondition = "Partly Cloudy", LocalTime = "12:15 PM EAT", VisaStatus = "eVisa Required", HealthWarning = "Yellow Fever Mandatory", RiskLevel = "Moderate" }, new DestinationGuide { City = "Cape Town", CountryCode = "ZA", Traveller = "J. Mokoena", WeatherEmoji = "🌧️", Temperature = 12, WeatherCondition = "Heavy rain, cold front", LocalTime = "11:15 AM SAST", VisaStatus = "Not Applicable", HealthWarning = "None", RiskLevel = "Low" } }; // Populate global advisories feed SafetyAlerts = new List { new GlobalRiskAlert { Id = 1, Title = "Planned Ground Crew Strike action (London Heathrow)", PublishedTime = "22 May 2026, 09:14 AM", Severity = "Critical", Category = "Labor Dispute", Description = "A 48-hour ground handler strike is notified for Heathrow Airport Terminal 2 & 5. Expect airline rescheduling, baggage delays, and boarding queues. SAQA travellers on the BA route have been contacted for pre-arranged lounge transfers." }, new GlobalRiskAlert { Id = 2, Title = "Tropical Cyclone advisory (Mozambique Channel)", PublishedTime = "23 May 2026, 08:30 AM", Severity = "Warning", Category = "Severe Weather", Description = "High-velocity tropical system tracking near Beira. Staff scheduled for Maputo or regional liaison should avoid non-essential regional flights until June 2." }, new GlobalRiskAlert { Id = 3, Title = "High Capacity Notice: SLOW Lounge OR Tambo JNB", PublishedTime = "24 May 2026, 07:15 AM", Severity = "Info", Category = "Facility Advisory", Description = "SLOW lounge is reporting high peak queues between 06:00 and 09:00 SAST daily. Executive travellers are advised to pre-book their slots using this companion app to guarantee priority entry." } }; } // Interactive Filters private void SetAlertFilter(string filter) { SelectedAlertFilter = filter; } // Destinations action guides private void ExploreDestinationInDepth(DestinationGuide dest) { TriggerFeedback($"Loaded complete Orientation Portfolio for {dest.City} ({dest.CountryCode}). Sending localized safety briefs to {dest.Traveller}'s device."); } private void SimulateNotifyTravellers(GlobalRiskAlert alert) { TriggerFeedback($"Notification sent successfully! Pushed critical alert '{alert.Title}' as an SMS and inside the Companion Wallet of active SAQA travellers."); } // Vip booking processors private void ProcessVipBooking() { TriggerFeedback($"VIP Service Request successfully processed! Authorized '{VipServiceLevel}' for {VipSelectedTraveller} departing {VipSelectedAirport} on {VipFlightDate.ToString("yyyy-MM-dd")}. Billed to SAQA Lodge Card."); ShowVipBookingModal = false; } // Airport transfer calculator helper private List GetTransferOptions(string city) { if (city == "London") { return new List { new AirportTransferOpt { Name = "Heathrow Express (Train)", Duration = "15 mins", ZarCost = 600M, Type = "Train" }, new AirportTransferOpt { Name = "Elizabeth Line Tube", Duration = "35 mins", ZarCost = 310M, Type = "Train" }, new AirportTransferOpt { Name = "Corporate Partner Shuttle", Duration = "45 mins", ZarCost = 1450M, Type = "Shuttle" } }; } else if (city == "Nairobi") { return new List { new AirportTransferOpt { Name = "Pre-arranged Hotel Shuttle", Duration = "25 mins", ZarCost = 450M, Type = "Shuttle" }, new AirportTransferOpt { Name = "Local Rideshare App (Uber)", Duration = "30 mins", ZarCost = 280M, Type = "Cab" } }; } else { return new List { new AirportTransferOpt { Name = "SA Express Shuttle Service", Duration = "20 mins", ZarCost = 380M, Type = "Shuttle" }, new AirportTransferOpt { Name = "MyCiTi Airport Bus 110", Duration = "30 mins", ZarCost = 120M, Type = "Shuttle" }, new AirportTransferOpt { Name = "Airport authorized Private Cab", Duration = "25 mins", ZarCost = 320M, Type = "Cab" } }; } } // Modals visibility Helpers private void OpenVipBookingModal() { ShowVipBookingModal = true; } private void CloseVipBookingModal() { ShowVipBookingModal = false; } private void OpenShuttleModal() { ShowShuttleModal = true; } private void CloseShuttleModal() { ShowShuttleModal = false; } private void OpenCultureModal() { ShowCultureModal = true; } private void CloseCultureModal() { ShowCultureModal = false; } private void OpenHealthTrackerModal() { ShowHealthTrackerModal = true; } private void CloseHealthTrackerModal() { ShowHealthTrackerModal = false; } // Toast triggered alert toaster private void TriggerFeedback(string message) { AlertFeedback = message; _ = DismissAlertAfterDelay(); } private async Task DismissAlertAfterDelay() { await Task.Delay(5000); AlertFeedback = string.Empty; StateHasChanged(); } }