import React, { useState, useEffect } from 'react'; import { getTodos, createTodo, updateTodo, deleteTodo } from '../services/api'; const TodoList = () => { const [todos, setTodos] = useState([]); const [newTitle, setNewTitle] = useState(''); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchTodos(); }, []); const fetchTodos = async () => { try { setLoading(true); const data = await getTodos(); // Sort by active first, then completed. Secondary sort by id descending setTodos(data.sort((a, b) => { if (a.completed === b.completed) { return b.id - a.id; } return a.completed ? 1 : -1; })); } catch (err) { setError(err.message); } finally { setLoading(false); } }; const handleCreate = async (e) => { e.preventDefault(); if (!newTitle.trim()) return; try { const created = await createTodo({ title: newTitle.trim(), description: '', completed: false }); setTodos([created, ...todos]); setNewTitle(''); } catch (err) { setError(err.message); } }; const handleToggle = async (todo) => { try { const updated = await updateTodo(todo.id, { ...todo, completed: !todo.completed }); setTodos(todos.map(t => t.id === todo.id ? updated : t).sort((a, b) => { if (a.id === updated.id) a = updated; if (b.id === updated.id) b = updated; if (a.completed === b.completed) return b.id - a.id; return a.completed ? 1 : -1; })); } catch (err) { setError(err.message); } }; const handleDelete = async (id) => { try { await deleteTodo(id); setTodos(todos.filter(t => t.id !== id)); } catch (err) { setError(err.message); } }; return (