using System.ComponentModel; using System.Windows.Media; using Brush = System.Windows.Media.Brush; using Brushes = System.Windows.Media.Brushes; using ColorConverter = System.Windows.Media.ColorConverter; using Color = System.Windows.Media.Color; using static AgroBase.Models.Enums; using OperationControl.Models; namespace OperationControl.ViewModels.Views.Operacao { public class OperacaoTopViewModel : INotifyPropertyChanged { private string _contextoSelecionado = "ROVER 01"; public string ContextoSelecionado { get => _contextoSelecionado; set { _contextoSelecionado = value; OnPropertyChanged(nameof(ContextoSelecionado)); } } private string _tituloStatus = "ROVER OPERANDO NORMALMENTE"; public string TituloStatus { get => _tituloStatus; set { _tituloStatus = value; OnPropertyChanged(nameof(TituloStatus)); } } private string _motivoPrincipal = "Todos os módulos obrigatórios e regras de controle estão OK."; public string MotivoPrincipal { get => _motivoPrincipal; set { _motivoPrincipal = value; OnPropertyChanged(nameof(MotivoPrincipal)); } } private string _badgeTexto = "NORMAL"; public string BadgeTexto { get => _badgeTexto; set { _badgeTexto = value; OnPropertyChanged(nameof(BadgeTexto)); } } private string _resumoCurto = "Sistema saudável"; public string ResumoCurto { get => _resumoCurto; set { _resumoCurto = value; OnPropertyChanged(nameof(ResumoCurto)); } } private Brush _corFundo = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#153D2C")); public Brush CorFundo { get => _corFundo; set { _corFundo = value; OnPropertyChanged(nameof(CorFundo)); } } private Brush _corBorda = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#2C7A57")); public Brush CorBorda { get => _corBorda; set { _corBorda = value; OnPropertyChanged(nameof(CorBorda)); } } private Brush _corAccent = Brushes.LightGreen; public Brush CorAccent { get => _corAccent; set { _corAccent = value; OnPropertyChanged(nameof(CorAccent)); } } private Brush _corBadge = Brushes.LightGreen; public Brush CorBadge { get => _corBadge; set { _corBadge = value; OnPropertyChanged(nameof(CorBadge)); } } private Brush _corTexto = Brushes.White; public Brush CorTexto { get => _corTexto; set { _corTexto = value; OnPropertyChanged(nameof(CorTexto)); } } private Brush _corTextoBadge = Brushes.Black; public Brush CorTextoBadge { get => _corTextoBadge; set { _corTextoBadge = value; OnPropertyChanged(nameof(CorTextoBadge)); } } public void AtualizarStatus(StatusModulo status, string titulo, StatusOperacao status_op, string linha1, string linha2, string status_str, string resumo) { ContextoSelecionado = $"{titulo} • {status_op}"; TituloStatus = linha1; MotivoPrincipal = linha2; BadgeTexto = status_str; ResumoCurto = resumo; AplicarPaletaStatus(status); } private void AplicarPaletaStatus(StatusModulo status) { switch (status) { case StatusModulo.Desconectado: CorFundo = BrushFromHex("#2A2F36"); CorBorda = BrushFromHex("#4B5563"); CorAccent = BrushFromHex("#9CA3AF"); CorBadge = BrushFromHex("#9CA3AF"); CorTexto = Brushes.White; CorTextoBadge = BrushFromHex("#111827"); break; case StatusModulo.Conectado: CorFundo = BrushFromHex("#15324A"); CorBorda = BrushFromHex("#2563EB"); CorAccent = BrushFromHex("#60A5FA"); CorBadge = BrushFromHex("#60A5FA"); CorTexto = Brushes.White; CorTextoBadge = BrushFromHex("#0B1220"); break; case StatusModulo.Falha: CorFundo = BrushFromHex("#4A1D1D"); CorBorda = BrushFromHex("#DC2626"); CorAccent = BrushFromHex("#F87171"); CorBadge = BrushFromHex("#F87171"); CorTexto = Brushes.White; CorTextoBadge = BrushFromHex("#1F0A0A"); break; case StatusModulo.Alerta: CorFundo = BrushFromHex("#4A3A12"); CorBorda = BrushFromHex("#D97706"); CorAccent = BrushFromHex("#FBBF24"); CorBadge = BrushFromHex("#FBBF24"); CorTexto = Brushes.White; CorTextoBadge = BrushFromHex("#1F1400"); break; case StatusModulo.Operante: default: CorFundo = BrushFromHex("#153D2C"); CorBorda = BrushFromHex("#2C7A57"); CorAccent = BrushFromHex("#86EFAC"); CorBadge = BrushFromHex("#86EFAC"); CorTexto = Brushes.White; CorTextoBadge = BrushFromHex("#052E16"); break; } } private SolidColorBrush BrushFromHex(string hex) { return new SolidColorBrush((Color)ColorConverter.ConvertFromString(hex)); } public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged(string nome) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome)); } } public class MotivoTopBarModel { public int Prioridade { get; set; } public string Fonte { get; set; } = ""; public string Titulo { get; set; } = ""; public string Descricao { get; set; } = ""; public StatusModulo StatusVisual { get; set; } public T_Code? Modulo { get; set; } } public class LogEventoOperacaoModel { public DateTime DataHora { get; set; } public string RoverId { get; set; } public string TipoTransicao { get; set; } // INICIO / FIM / MUDANCA public string Fonte { get; set; } public string Titulo { get; set; } public string Descricao { get; set; } public StatusModulo StatusVisual { get; set; } public T_Code? Modulo { get; set; } public string Hora => DataHora.ToString("HH:mm:ss"); public string DataHoraCompleta => DataHora.ToString("dd/MM/yyyy HH:mm:ss"); public string Subtitulo { get { var moduloTxt = Modulo?.ToString(); if (!string.IsNullOrWhiteSpace(moduloTxt)) return $"{Fonte} • {moduloTxt} • {RoverId}"; return $"{Fonte} • {RoverId}"; } } public Brush CorAccent { get { return StatusVisual switch { StatusModulo.Falha => Brushes.IndianRed, StatusModulo.Desconectado => Brushes.DarkRed, StatusModulo.Alerta => Brushes.Goldenrod, StatusModulo.Operante => Brushes.ForestGreen, StatusModulo.Conectado => Brushes.SteelBlue, _ => Brushes.Gray }; } } public Brush CorBadge { get { return TipoTransicao switch { "INICIO" => Brushes.OrangeRed, "FIM" => Brushes.SeaGreen, "MUDANCA" => Brushes.SteelBlue, _ => Brushes.DimGray }; } } } public class HistoricoOperacaoItemModel { public DateTime DataHora { get; set; } public string RoverId { get; set; } public TipoHistoricoOperacao Tipo { get; set; } // Operacao ou Alerta public string TipoTransicao { get; set; } // INICIO / FIM / MUDANCA public string Fonte { get; set; } // ex: Controle, Trajetoria, AlertaModulo public string Titulo { get; set; } public string Descricao { get; set; } public StatusModulo? StatusVisual { get; set; } // para eventos operacionais public SeveridadeAlerta? SeveridadeAlerta { get; set; } // para alertas public T_Code? Modulo { get; set; } public string? ModId { get; set; } public string Hora => DataHora.ToString("HH:mm:ss"); public string DataHoraCompleta => DataHora.ToString("dd/MM/yyyy HH:mm:ss"); public string Subtitulo { get { var partes = new List(); partes.Add(Tipo == TipoHistoricoOperacao.Alerta ? "Alerta" : "Operação"); if (!string.IsNullOrWhiteSpace(Fonte)) partes.Add(Fonte); if (Modulo.HasValue) partes.Add(Modulo.Value.ToString()); if (!string.IsNullOrWhiteSpace(ModId)) partes.Add(ModId); if (!string.IsNullOrWhiteSpace(RoverId)) partes.Add(RoverId); return string.Join(" • ", partes); } } public Brush CorAccent { get { if (Tipo == TipoHistoricoOperacao.Alerta) { return SeveridadeAlerta switch { Models.SeveridadeAlerta.Warning => Brushes.Goldenrod, Models.SeveridadeAlerta.Error => Brushes.IndianRed, Models.SeveridadeAlerta.Critical => Brushes.DarkRed, _ => Brushes.SteelBlue }; } return StatusVisual switch { StatusModulo.Falha => Brushes.IndianRed, StatusModulo.Desconectado => Brushes.DarkRed, StatusModulo.Alerta => Brushes.Goldenrod, StatusModulo.Operante => Brushes.ForestGreen, StatusModulo.Conectado => Brushes.SteelBlue, _ => Brushes.Gray }; } } public Brush CorBadge { get { return TipoTransicao switch { "INICIO" => Brushes.OrangeRed, "FIM" => Brushes.SeaGreen, "MUDANCA" => Brushes.SteelBlue, _ => Brushes.DimGray }; } } } public enum TipoHistoricoOperacao { Operacao = 0, Alerta = 1 } }