using OperationControl.Controls; using OperationControl.Models; using System.ComponentModel; namespace OperationControl.ViewModels.Views.Operacao { public class OperacaoCenterViewModel : INotifyPropertyChanged { public OperacaoCenterViewModel() { } public event Action RoverSelecionadoChanged; public event PropertyChangedEventHandler? PropertyChanged; private RoverCardModel? roverSelecionado; private bool _comRoverSelecionado; public bool ComRoverSelecionado { get => _comRoverSelecionado; set { if (_comRoverSelecionado != value) { _comRoverSelecionado = value; OnPropertyChanged(nameof(ComRoverSelecionado)); } } } private OperacaoCenterConteudo _conteudoAtual = OperacaoCenterConteudo.Mapa; public OperacaoCenterConteudo ConteudoAtual { get => _conteudoAtual; set { _conteudoAtual = value; OnPropertyChanged(nameof(ConteudoAtual)); OnPropertyChanged(nameof(ExibirMapa)); OnPropertyChanged(nameof(ExibirDiagnostico)); OnPropertyChanged(nameof(ExibirMonitoramento)); OnPropertyChanged(nameof(TituloCentro)); OnPropertyChanged(nameof(SubtituloCentro)); } } public bool ExibirMapa => ConteudoAtual == OperacaoCenterConteudo.Mapa; public bool ExibirDiagnostico => ConteudoAtual == OperacaoCenterConteudo.Diagnostico; public bool ExibirMonitoramento => ConteudoAtual == OperacaoCenterConteudo.Monitoramento; public string TituloCentro { get { if (!ComRoverSelecionado) return "Nenhum rover selecionado"; return ConteudoAtual switch { OperacaoCenterConteudo.Diagnostico => "Diagnóstico do Rover", OperacaoCenterConteudo.Monitoramento => "Monitoramento do Rover", OperacaoCenterConteudo.Mapa => "Mapa da Operação", _ => "Área Principal da Operação" }; } } public string SubtituloCentro { get { if (!ComRoverSelecionado) return "Selecione um rover para visualizar os dados."; return ConteudoAtual switch { OperacaoCenterConteudo.Diagnostico => "Aqui serão exibidos os dados de diagnóstico do rover selecionado.", OperacaoCenterConteudo.Monitoramento => "Aqui serão exibidos os dados de monitoramento em tempo real do rover.", OperacaoCenterConteudo.Mapa => "Aqui será exibido o mapa e os dados operacionais do rover selecionado.", _ => "Conteúdo da operação." }; } } public void SelecionarRoverLista(RoverCardModel? rover) { roverSelecionado = rover; ComRoverSelecionado = roverSelecionado != null; DefinirSecao(ComRoverSelecionado ? SecaoRightBar.Menu : SecaoRightBar.SemRoverSelecionado); } public void DefinirSecao(SecaoRightBar secao) { ConteudoAtual = secao switch { SecaoRightBar.Diagnostico => OperacaoCenterConteudo.Diagnostico, SecaoRightBar.Resumo => OperacaoCenterConteudo.Monitoramento, SecaoRightBar.Controle => OperacaoCenterConteudo.Monitoramento, SecaoRightBar.Parametrizacao => OperacaoCenterConteudo.Mapa, SecaoRightBar.Menu => OperacaoCenterConteudo.Monitoramento, _ => OperacaoCenterConteudo.Mapa }; } private void OnPropertyChanged(string nome) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome)); } public void ProcessarMarkerClicked(MapMarkerManager.MarkerClickedEventArgs e) { if (string.IsNullOrEmpty(e.MarkerId)) { Variaveis.MostrarLog("Sem rover em foco"); RoverSelecionadoChanged?.Invoke(null); } else { Variaveis.MostrarLog($"Rover em foco: {e.MarkerId}"); RoverSelecionadoChanged?.Invoke(e.MarkerId); } } public void ProcessarStreetMapClicked(MapViewControl.StreetMapClickedEventArgs e) { Variaveis.MostrarLog($"Rua clicada: {e.StreetId}. Ruas selecionadas: {string.Join(",", e.SelectedStreetsIds)}"); } } public enum OperacaoCenterConteudo { Mapa = 1, Diagnostico = 2, Monitoramento = 3 } }