import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:tatlock_ui/core/api/api_client.dart'; import 'package:tatlock_ui/features/control_room/containers/data/models/container_model.dart'; part 'containers_datasource.g.dart'; /// Remote data source for container operations. class ContainersDatasource { ContainersDatasource(this._dio); final Dio _dio; /// Gets all containers from the API. Future> getContainers({bool all = true}) async { final response = await _dio.get>( '/infrastructure/containers', queryParameters: {'all': all}, ); return response.data! .map((json) => ContainerModel.fromJson(json as Map)) .toList(); } /// Gets a single container by ID. Future getContainer(String id) async { final response = await _dio.get>( '/infrastructure/containers/$id', ); return ContainerModel.fromJson(response.data!); } /// Performs an action on a container. Future containerAction(String id, String action) async { await _dio.post('/infrastructure/containers/$id/$action'); } /// Gets container logs. Future getContainerLogs( String id, { int? tail, bool timestamps = false, }) async { final response = await _dio.get( '/infrastructure/containers/$id/logs', queryParameters: { if (tail != null) 'tail': tail, 'timestamps': timestamps, }, ); return response.data ?? ''; } /// Removes a container. Future removeContainer(String id, {bool force = false}) async { await _dio.delete( '/infrastructure/containers/$id', queryParameters: {'force': force}, ); } } /// Provides the containers datasource. @riverpod ContainersDatasource containersDatasource(Ref ref) { final dio = ref.watch(coreApiClientProvider); return ContainersDatasource(dio); }