import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/network/dio_client.dart'; import '../../data/datasources/tasks_datasource.dart'; import '../../data/repositories/tasks_repository_impl.dart'; import '../../domain/entities/task.dart'; import '../../domain/repositories/tasks_repository.dart'; import '../../domain/usecases/create_task.dart'; import '../../domain/usecases/get_tasks.dart'; // --------------------------------------------------------------------------- // Dependency providers // --------------------------------------------------------------------------- final tasksDatasourceProvider = Provider((ref) { final dio = ref.watch(dioClientProvider); return TasksDatasource(dio); }); final tasksRepositoryProvider = Provider((ref) { final datasource = ref.watch(tasksDatasourceProvider); return TasksRepositoryImpl(datasource); }); // --------------------------------------------------------------------------- // Use case providers // --------------------------------------------------------------------------- final getTasksUseCaseProvider = Provider((ref) { return GetTasks(ref.watch(tasksRepositoryProvider)); }); final createTaskUseCaseProvider = Provider((ref) { return CreateTask(ref.watch(tasksRepositoryProvider)); }); // --------------------------------------------------------------------------- // Data providers // --------------------------------------------------------------------------- /// Provides the full list of tasks. final tasksListProvider = FutureProvider>((ref) async { final useCase = ref.watch(getTasksUseCaseProvider); return useCase.execute(); }); /// Provides tasks filtered by status. final tasksByStatusProvider = FutureProvider.family, String>((ref, status) async { final useCase = ref.watch(getTasksUseCaseProvider); return useCase.execute(status: status); }); /// Provides the list of available servers for the task creation form. final serversForTaskPickerProvider = FutureProvider>>((ref) async { final dio = ref.watch(dioClientProvider); final response = await dio.get('/api/v1/inventory/servers'); final data = response.data; if (data is List) return data.cast>(); if (data is Map && data.containsKey('items')) { return (data['items'] as List).cast>(); } return []; });