using System;

namespace UVC.Twin.MonitoringUI
{
    public class MonitoringUIEvents
    {
        public event Action<string> OnBayViewChangeRequested;
        public event Action<string> OnInfoPanelRequested;
        public event Action<string> OnVisibilityToggleRequested;
        public event Action OnSettingsRequested;
        public event Action OnUserProfileRequested;
        public event Action OnExportRequested;

        public event Action<string> OnProcessCardSelected;
        public event Action<string> OnEquipmentCardSelected;
        public event Action<string> OnScheduleToggleChanged;
        public event Action<int> OnScheduleDateNavigated;
        public event Action<string> OnScheduleEquipmentFilterChanged;
        public event Action<string> OnScheduleDateFilterChanged;

        public void RaiseBayViewChange(string bayId)
            => OnBayViewChangeRequested?.Invoke(bayId);

        public void RaiseInfoPanelRequest(string panelType)
            => OnInfoPanelRequested?.Invoke(panelType);

        public void RaiseVisibilityToggle(string layerId)
            => OnVisibilityToggleRequested?.Invoke(layerId);

        public void RaiseSettingsRequest()
            => OnSettingsRequested?.Invoke();

        public void RaiseUserProfileRequest()
            => OnUserProfileRequested?.Invoke();

        public void RaiseExportRequest()
            => OnExportRequested?.Invoke();

        public void RaiseProcessCardSelected(string tabName)
            => OnProcessCardSelected?.Invoke(tabName);

        public void RaiseEquipmentCardSelected(string cardId)
            => OnEquipmentCardSelected?.Invoke(cardId);

        public void RaiseScheduleToggleChanged(string mode)
            => OnScheduleToggleChanged?.Invoke(mode);

        public void RaiseScheduleDateNavigated(int offset)
            => OnScheduleDateNavigated?.Invoke(offset);

        public void RaiseScheduleEquipmentFilterChanged(string equipmentName)
            => OnScheduleEquipmentFilterChanged?.Invoke(equipmentName);

        public void RaiseScheduleDateFilterChanged(string date)
            => OnScheduleDateFilterChanged?.Invoke(date);
    }
}
