agrobot_base/AgroBase/OperationControl/ViewModels/Views/Operacao/OperacaoTopViewModel.cs

332 lines
11 KiB
C#
Raw Permalink Normal View History

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;
2026-03-20 02:03:07 +00:00
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; }
}
2026-03-20 02:03:07 +00:00
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<string>();
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
}
}