import 'package:http/http.dart' as http; import 'dart:convert'; import 'package:insparkspokalen_ui/models/postModel.dart'; import 'package:flutter/foundation.dart'; class FeedService extends ChangeNotifier { final String baseUrl = 'https://group-10-15.pvt.dsv.su.se/mission/post'; List _posts = []; List get posts => _posts; /* Future> showFeed() async { final endpoint = Uri.parse('$baseUrl/all'); try { final response = await http.get(endpoint); if (response.statusCode == 200) { final List data = jsonDecode(response.body); return data.map((json) => PostModel.fromJson(json)).toList(); } else { return []; } } catch (e) { return []; } } */ Future loadPosts() async { final endpoint = Uri.parse('$baseUrl/all'); try { final response = await http.get(endpoint); if (response.statusCode == 200) { final List data = jsonDecode(response.body); _posts = data.map((json) => PostModel.fromJson(json)).toList(); notifyListeners(); } else { _posts = []; notifyListeners(); } } catch (e) { _posts = []; notifyListeners(); } } Future addPost(PostModel post) async { final response = await http.post( Uri.parse('$baseUrl/add'), headers: {'Content-Type': 'application/json'}, body: jsonEncode(post.toJson()), ); if (response.statusCode == 200 || response.statusCode == 201) { final decoded = jsonDecode(response.body); // Om decoded bara är ett heltal, använd det som id if (decoded is int) { return PostModel( id: decoded, title: post.title, body: post.body, filename: post.filename, filetype: post.filetype, time: post.time, locationname: post.locationname, latitude: post.latitude, longitude: post.longitude, points: post.points, teamid: post.teamid, missionid: post.missionid, approved: post.approved, ); } else { throw Exception("Oväntat svar från servern: $decoded"); } } else { throw Exception("Kunde inte skapa inlägg"); } } Future deletePost(PostModel post) async { if (post.id == null) { throw Exception("Post har inget id och kan inte raderas"); } final endpoint = Uri.parse('$baseUrl/delete/${post.id}'); final response = await http.delete(endpoint); if (response.statusCode != 200) { throw Exception("Kunde inte radera inlägg: ${response.body}"); } } Future updatePostStatus(PostModel post, PostStatus newStatus) async { final endpoint = Uri.parse('$baseUrl/setstatus/${post.id}'); try { final response = await http.put( endpoint, headers: {"Content-Type": "application/json"}, body: jsonEncode({ "approved": newStatus.name, "timeupdated": DateTime.now().toIso8601String(), }), ); if (response.statusCode != 200) { throw Exception( "Kunde inte uppdatera status. Servern svarade med ${response.statusCode}", ); } // Uppdatera lokalt efter lyckad PUT await loadPosts(); } catch (e) { throw Exception("Något gick fel vid statusuppdatering: $e"); } } }