diff --git a/Policlinica/ViewModels/SugarCheckViewModel.cs b/Policlinica/ViewModels/SugarCheckViewModel.cs new file mode 100644 index 0000000..a8f30df --- /dev/null +++ b/Policlinica/ViewModels/SugarCheckViewModel.cs @@ -0,0 +1,105 @@ +using System; +using Avalonia.Controls; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Microsoft.Extensions.DependencyInjection; +using Policlinica.Views; + +namespace Policlinica.ViewModels; + +public partial class SugarCheckViewModel : ViewModelBase +{ + private readonly Navigation _navigation; + private readonly IServiceProvider _provider; + private SugarCheckView _view; + + [ObservableProperty] string result = ""; + [ObservableProperty] string statusMessage = ""; + + public SugarCheckViewModel(Navigation navigation, IServiceProvider provider) + { + _navigation = navigation; + _provider = provider; + } + + public void SetView(SugarCheckView view) + { + _view = view; + } + + [RelayCommand] + public void Calculate() + { + if (_view == null) + { + StatusMessage = "Ошибка: вид не инициализирован"; + return; + } + + // Получаем значения из TextBox'ов + var weightInput = _view.FindControl("WeightInput"); + var heightInput = _view.FindControl("HeightInput"); + + if (weightInput?.Text == null || heightInput?.Text == null) + { + StatusMessage = "Введите значения веса и роста"; + return; + } + + if (!decimal.TryParse(weightInput.Text, out decimal weight) || !decimal.TryParse(heightInput.Text, out decimal height)) + { + StatusMessage = "Введите корректные числовые значения"; + return; + } + + if (weight <= 0 || height <= 0) + { + StatusMessage = "Вес и рост должны быть больше нуля"; + Result = ""; + return; + } + + try + { + // Расчет BMI (индекс массы тела) + decimal heightInMeters = height / 100; + decimal bmi = weight / (heightInMeters * heightInMeters); + + string recommendation; + + if (bmi < 18.5m) + { + recommendation = "Статус: Недостаточный вес\nРекомендуемый уровень сахара: 3.9 - 5.8 ммоль/л"; + } + else if (bmi < 25m) + { + recommendation = "Статус: Нормальный вес\nРекомендуемый уровень сахара: 3.9 - 5.8 ммоль/л"; + } + else if (bmi < 30m) + { + recommendation = "Статус: Избыточный вес\nРекомендуемый уровень сахара: 3.9 - 6.1 ммоль/л\nРекомендуется контролировать уровень глюкозы"; + } + else + { + recommendation = "Статус: Ожирение\nРекомендуемый уровень сахара: 3.9 - 7.0 ммоль/л\nОбратитесь к врачу"; + } + + Result = $"BMI: {bmi:F1}\n{recommendation}"; + StatusMessage = ""; + Console.WriteLine($"Calculated - Weight: {weight}, Height: {height}, BMI: {bmi:F1}"); + } + catch (Exception ex) + { + StatusMessage = $"Ошибка: {ex.Message}"; + Result = ""; + Console.WriteLine($"Error: {ex}"); + } + } + + [RelayCommand] + public void Back() + { + var vm = ActivatorUtilities.CreateInstance(_provider); + _navigation.Navigate(vm); + } +} diff --git a/Policlinica/Views/SugarCheckView.axaml b/Policlinica/Views/SugarCheckView.axaml new file mode 100644 index 0000000..21f0c55 --- /dev/null +++ b/Policlinica/Views/SugarCheckView.axaml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + +