import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/predict_device_model.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/views/widgets/equipment/predict_device_list.dart'; class CopilotHelper { static Future pickImageFromCamera(BuildContext context, {bool pickMode = false}) async { final status = await Permission.camera.status; if (status.isGranted) { return openCamera(context, pickMode: pickMode); } final permission = await Permission.camera.request(); if (permission.isGranted) { return openCamera(context, pickMode: pickMode); } if (permission.isPermanentlyDenied) { await openAppSettings(); return null; } debugPrint('Camera permission denied'); return null; } static Future openCamera(BuildContext context, {bool pickMode = false}) async { final XFile? pickedFile = await ImagePicker().pickImage( source: ImageSource.camera, imageQuality: 70, ); if (pickedFile == null) { return null; } final File imageFile = File(pickedFile.path); return uploadImage(imageFile, context, pickMode: pickMode); } static Future uploadImage(File imageFile, BuildContext context, {bool pickMode = false}) async { try { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); AssetProvider assetProvider = Provider.of(context, listen: false); PredictDeviceResponse? response = await assetProvider.predictDevice(imageFile); Navigator.pop(context); if (response != null && response.success == true) { final List predictedAssetList = response.predictedAsset ?? []; if (predictedAssetList.isNotEmpty) { return Navigator.push( context, MaterialPageRoute(builder: (context) => PredictDeviceView(predictedAsset: predictedAssetList, pickMode: pickMode)), ); } else { context.showInfoDialog("No Predicted asset found"); } } else { context.showInfoDialog("Failed to recognize the asset. Please try again."); } } catch (e) { debugPrint('Upload error: $e'); } return null; } }