import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart'; import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; import 'package:syncrow_web/pages/spaces_management/model/space_response_model.dart'; import 'package:syncrow_web/services/api/http_service.dart'; import 'package:syncrow_web/utils/constants/api_const.dart'; class CommunitySpaceManagementApi { // Community Management APIs Future> fetchCommunities() async { try { final response = await HTTPService().get( path: ApiEndpoints.getCommunityList, expectedResponseModel: (json) { // Access the 'data' key from the response List jsonData = json['data']; // Check if jsonData is actually a List List communityList = jsonData.map((jsonItem) { return CommunityModel.fromJson(jsonItem); }).toList(); return communityList; }, ); return response; } catch (e) { debugPrint('Error fetching communities: $e'); return []; } } Future getCommunityById(String communityId) async { try { final response = await HTTPService().get( path: ApiEndpoints.getCommunityById.replaceAll('{communityId}', communityId), expectedResponseModel: (json) { return CommunityModel.fromJson(json['data']); }, ); return response; } catch (e) { debugPrint('Error fetching community by ID: $e'); return null; } } Future createCommunity(String name, String description, String regionId) async { try { final response = await HTTPService().post( path: ApiEndpoints.createCommunity, body: { 'name': name, 'description': description, 'regionId': regionId, }, expectedResponseModel: (json) { return CommunityModel.fromJson(json['data']); }, ); return response; } catch (e) { debugPrint('Error creating community: $e'); return null; } } Future updateCommunity(String communityId, CommunityModel community) async { try { final response = await HTTPService().put( path: ApiEndpoints.updateCommunity.replaceAll('{communityId}', communityId), body: community.toMap(), expectedResponseModel: (json) { return json['success'] ?? false; }, ); return response; } catch (e) { debugPrint('Error updating community: $e'); return false; } } Future deleteCommunity(String communityId) async { try { final response = await HTTPService().delete( path: ApiEndpoints.deleteCommunity.replaceAll('{communityId}', communityId), expectedResponseModel: (json) { return json['success'] ?? false; }, ); return response; } catch (e) { debugPrint('Error deleting community: $e'); return false; } } Future fetchSpaces(String communityId) async { try { final response = await HTTPService().get( path: ApiEndpoints.listSpaces.replaceAll('{communityId}', communityId), expectedResponseModel: (json) { return SpacesResponse.fromJson(json); }, ); return response; } catch (e) { debugPrint('Error fetching spaces: $e'); return SpacesResponse( data: [], message: 'Error fetching spaces', page: 1, size: 10, totalItem: 0, totalPage: 0, hasNext: false, hasPrevious: false, ); } } Future getSpace(String communityId, String spaceId) async { try { final response = await HTTPService().get( path: ApiEndpoints.getSpace .replaceAll('{communityId}', communityId) .replaceAll('{spaceId}', spaceId), expectedResponseModel: (json) { return SpaceModel.fromJson(json); }, ); return response; } catch (e) { debugPrint('Error fetching space: $e'); return null; // Assuming an empty SpaceModel constructor } } Future createSpace({ required String communityId, required String name, String? parentId, String? direction, bool isPrivate = false, required Offset position, String? icon, required List products, }) async { try { final body = { 'spaceName': name, 'isPrivate': isPrivate, 'x': position.dx, 'y': position.dy, 'direction': direction, 'icon': icon, 'products': products.map((product) => product.toJson()).toList(), }; if (parentId != null) { body['parentUuid'] = parentId; } final response = await HTTPService().post( path: ApiEndpoints.createSpace.replaceAll('{communityId}', communityId), body: body, expectedResponseModel: (json) { return SpaceModel.fromJson(json['data']); }, ); return response; } catch (e) { debugPrint('Error creating space: $e'); return null; } } Future updateSpace({ required String communityId, required spaceId, required String name, String? parentId, String? icon, String? direction, bool isPrivate = false, required Offset position, }) async { try { final body = { 'spaceName': name, 'isPrivate': isPrivate, 'x': position.dx, 'y': position.dy, 'direction': direction, 'icon': icon }; if (parentId != null) { body['parentUuid'] = parentId; } final response = await HTTPService().put( path: ApiEndpoints.updateSpace .replaceAll('{communityId}', communityId) .replaceAll('{spaceId}', spaceId), body: body, expectedResponseModel: (json) { return SpaceModel.fromJson(json['data']); }, ); return response; } catch (e) { debugPrint('Error creating space: $e'); return null; } } Future deleteSpace(String communityId, String spaceId) async { try { final response = await HTTPService().delete( path: ApiEndpoints.deleteSpace .replaceAll('{communityId}', communityId) .replaceAll('{spaceId}', spaceId), expectedResponseModel: (json) { return json['success'] ?? false; }, ); return response; } catch (e) { debugPrint('Error deleting space: $e'); return false; } } Future> getSpaceHierarchy(String communityId) async { try { final response = await HTTPService().get( path: ApiEndpoints.getSpaceHierarchy.replaceAll('{communityId}', communityId), expectedResponseModel: (json) { return (json['data'] as List).map((spaceJson) => SpaceModel.fromJson(spaceJson)).toList(); }, ); return response; } catch (e) { debugPrint('Error fetching space hierarchy: $e'); return []; } } }