import 'dart:io'; import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:http_parser/http_parser.dart'; import '../../../core/network/api_client.dart'; import '../models/incident.dart'; final incidentServiceProvider = Provider((ref) { return IncidentService(ref.read(apiClientProvider)); }); class IncidentService { IncidentService(this._dio); final Dio _dio; Future> listUnits() async { final res = await _dio.get>('/incidents/units'); return (res.data ?? []) .whereType() .map((e) => UnitOption.fromJson(Map.from(e))) .toList(); } Future createIncident({ required String category, required String description, int? unitId, File? photo, }) async { final form = FormData.fromMap({ 'category': category, 'description': description, if (unitId != null) 'unit_id': unitId, if (photo != null) 'photo': await MultipartFile.fromFile( photo.path, filename: photo.path.split(Platform.pathSeparator).last, contentType: MediaType('image', _ext(photo.path)), ), }); final res = await _dio.post>( '/incidents', data: form, options: Options(contentType: 'multipart/form-data'), ); return IncidentReport.fromJson(res.data!); } Future> myIncidents() async { final res = await _dio.get>('/incidents/me'); return (res.data ?? []) .whereType() .map((e) => IncidentReport.fromJson(Map.from(e))) .toList(); } String _ext(String path) { final dot = path.lastIndexOf('.'); if (dot == -1) return 'jpeg'; final ext = path.substring(dot + 1).toLowerCase(); if (ext == 'jpg') return 'jpeg'; return ext; } }