import "../config/api_config.dart"; import "../models/todo_item.dart"; import "api_client.dart"; import "mock_data.dart"; class TodoService { final ApiClient _client; TodoService(this._client); Future> fetchTodos() async { if (ApiConfig.useMockData) { return List.from(MockDataStore.todos); } final data = await _client.getList(ApiConfig.todos); return data .map((item) => TodoItem.fromJson(item as Map)) .toList(); } Future> fetchTodayTodos() async { if (ApiConfig.useMockData) { final now = DateTime.now(); final today = DateTime(now.year, now.month, now.day); final tomorrow = today.add(const Duration(days: 1)); return MockDataStore.todos.where((todo) { if (todo.completed) { // If completed, only show if it was due today if (todo.dueDate == null) return false; return todo.dueDate!.isAfter(today.subtract(const Duration(milliseconds: 1))) && todo.dueDate!.isBefore(tomorrow); } // If not completed: // 1. No due date -> show // 2. Due today or before -> show if (todo.dueDate == null) return true; return todo.dueDate!.isBefore(tomorrow); }).toList(); } final data = await _client.getList("${ApiConfig.todos}/today"); return data .map((item) => TodoItem.fromJson(item as Map)) .toList(); } Future createTodo(TodoItem todo) async { if (ApiConfig.useMockData) { final created = TodoItem( id: "todo-${DateTime.now().millisecondsSinceEpoch}", familyMemberId: todo.familyMemberId, title: todo.title, completed: todo.completed, dueDate: todo.dueDate, ); MockDataStore.todos.add(created); return created; } final data = await _client.post(ApiConfig.todos, todo.toJson()); return TodoItem.fromJson(data); } Future updateTodo(TodoItem todo) async { if (ApiConfig.useMockData) { final index = MockDataStore.todos.indexWhere( (item) => item.id == todo.id, ); if (index != -1) { MockDataStore.todos[index] = todo; } return todo; } final data = await _client.put( "${ApiConfig.todos}/${todo.id}", todo.toJson(), ); return TodoItem.fromJson(data); } Future deleteTodo(String id) async { if (ApiConfig.useMockData) { MockDataStore.todos.removeWhere((item) => item.id == id); return; } await _client.delete("${ApiConfig.todos}/$id"); } }