using AgroBase.Forms.Operacoes; using AgroBase.Models; using AgroBase.Models.Components; using AgroBase.Models.Modules; using AgroBase.Models.Operadores; using AgroBase.Properties; using AgroBase.Services; using AgroBase.Services.Operadores; using OpenHardwareMonitor.Hardware; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using static AgroBase.Models.Enums; namespace AgroBase.Forms.IHM { public partial class frmIHM : Form { AsyncTaskTimerModel tmrDispositivos; public frmIHM() { InitializeComponent(); FuncoesGlobais.DefinirEventosPicBtn(picOperacao, "Erro ao carregar operação!", async () => { frmInicioOperacao frm = new frmInicioOperacao(); frm.ShowDialog(); }); FuncoesGlobais.DefinirEventosPicBtn(picDiagnosticos, "Erro ao processar diagnóstico!", async () => { frmDiagnosticos frm = new frmDiagnosticos(); frm.ShowDialog(); }); FuncoesGlobais.DefinirEventosPicBtn(picAjustes, "Erro ao realizar ajustes!", async () => { frmAjustes frm = new frmAjustes(); frm.ShowDialog(); }); FuncoesGlobais.DefinirEventosPicBtn(picManual, "Erro ao carregar modo de controle manual!", async () => { OperacaoModel.CarregarParametrosOperacaoPadrao(ModoOperacao.Manual, true); if (Variaveis.OperacaoEmAndamento.OperacaoLiberada) { frmDialogoMapa frm = new frmDialogoMapa(); frm.Show(); frm.InicializarModoManual(); } else { CustomDialog.ShowDialog( "Iniciar Operação Manual", $"{Variaveis.OperacaoEmAndamento.ErroOperacaoLiberada ?? ""}", MessageBoxIcon.Error, new Dictionary<(string, dynamic), Action>() { { ("OK", null), () => { } }, } ); } }); FuncoesGlobais.DefinirEventosPicBtn(picDesligar, "Erro ao desligar equipamento!", async () => { if (Variaveis.Producao) { var res = CustomDialog.ShowDialog( "Desligar", "Deseja Desligar o Equipamento?", MessageBoxIcon.Question, new Dictionary<(string, DialogResult?), Action>() { { ("Sim", DialogResult.Yes), () => { } }, { ("Não", DialogResult.No), () => { } }, } ); if (res == DialogResult.Yes) { Process.Start("shutdown", "/s /t 0"); } } else { this.Close(); } }); FuncoesGlobais.DefinirEventosPicBtn(picWifi, "Erro ao procurar por atualizações!", async () => { if (APIService.HasInternet) { await VersionamentoService.AtualizarArquivoVersionamento(true); var arquivosNaoEncontrados = VersionamentoService.ArquivosNaoEncontrados.ToList(); bool sucesso = !arquivosNaoEncontrados.Any(); CustomDialog.ShowDialog( "Resultado", "Atualização concluída com " + (sucesso ? "sucesso" : "falha") + "!\r\n\r\n" + (!sucesso ? ("Arquivos não encontrados:\r\n\r\n" + string.Join("\r\n", arquivosNaoEncontrados)) : "Nenhum arquivo pendente!"), sucesso ? MessageBoxIcon.Asterisk : MessageBoxIcon.Error, new Dictionary<(string, dynamic), Action>() { { ("OK", null), () => { } }, } ); } else { CustomDialog.ShowDialog( "Equipamento Desconectado", "Impossível procurar por atualizações!", MessageBoxIcon.Warning, new Dictionary<(string, dynamic), Action>() { { ("OK", null), () => { } }, } ); } }); } private void frmIHM_Load(object sender, EventArgs e) { lblVersao.Text = "v " + Variaveis.Versao; tmrDispositivos?.Dispose(); tmrDispositivos = new AsyncTaskTimerModel("tmrDispositivos", tmrDispositivos_Tick, 1000, this); tmrDispositivos.Start(); lblCodigoFalha.Click -= LblCodigoFalha_Click; lblCodigoFalha.Click += LblCodigoFalha_Click; } private async Task tmrDispositivos_Tick() { try { // Atualizar controles da UI de forma segura if (tmrDispositivos._uiControl.InvokeRequired) { tmrDispositivos._uiControl.Invoke(new Action(async () => await AtualizarControlesUI())); } else { await AtualizarControlesUI(); } } catch (Exception ex) { Console.WriteLine($"Erro no tmrDispositivos_Tick: {ex.Message}"); } } private async Task AtualizarControlesUI() { var Labels = this.Controls.OfType