using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using Microsoft.Maui.Controls; using galacticlip_app.Models; using galacticlip_app.Services; using System.Windows.Input; namespace galacticlip_app { public class SearchViewModel : BindableObject { private readonly NasaMediaService _nasaMediaService; private string _searchQuery; public ObservableCollection LeftColumnImages { get; private set; } public ObservableCollection RightColumnImages { get; private set; } public string SearchQuery { get => _searchQuery; set { _searchQuery = value; OnPropertyChanged(); } } public ICommand ExecuteSearchCommand { get; } public ICommand OpenMediaDetailCommand { get; } public SearchViewModel() { _nasaMediaService = new NasaMediaService(); LeftColumnImages = new ObservableCollection(); RightColumnImages = new ObservableCollection(); // Load default random images initially LoadRandomImages(); // Set up the command for the search ExecuteSearchCommand = new Command(async () => await SearchImages()); OpenMediaDetailCommand = new Command(OnOpenMediaDetail); } private async void LoadRandomImages() { var images = await _nasaMediaService.GetRandomImagesAsync(); SplitImagesIntoColumns(images); } private async Task SearchImages() { if (string.IsNullOrWhiteSpace(SearchQuery)) { LoadRandomImages(); return; } var searchedImages = await _nasaMediaService.SearchMediaAsync(SearchQuery); SplitImagesIntoColumns(searchedImages); } private void SplitImagesIntoColumns(List images) { LeftColumnImages.Clear(); RightColumnImages.Clear(); for (int i = 0; i < images.Count; i++) { if (i % 2 == 0) { LeftColumnImages.Add(images[i]); } else { RightColumnImages.Add(images[i]); } } } private async void OnOpenMediaDetail(NasaMediaItem item) { if (item != null) { await App.Current.MainPage.Navigation.PushModalAsync(new MediaDetailPage(item)); } } } }