// interfaces/nativeapp/src/api/todo.ts
import apiClient from './client';
import { Todo, TodoCreate, TodoUpdate } from '../types/todo';

export const getTodos = async (skip: number = 0, limit: number = 100): Promise<Todo[]> => {
    try {
        const response = await apiClient.get('/todos/', { params: { skip, limit } });
        console.log("[TODO] Got todos:", response.data);
        return response.data;
    } catch (error) {
        console.error("Error fetching todos", error);
        throw error;
    }
};

export const getTodoById = async (todo_id: number): Promise<Todo> => {
    try {
        const response = await apiClient.get(`/todos/${todo_id}`);
        console.log("[TODO] Got todo:", response.data);
        return response.data;
    } catch (error) {
        console.error(`Error fetching todo ${todo_id}`, error);
        throw error;
    }
};

export const createTodo = async (todo: TodoCreate): Promise<Todo> => {
    try {
        const response = await apiClient.post('/todos/', todo);
        console.log("[TODO] Created todo:", response.data);
        return response.data;
    } catch (error) {
        console.error("Error creating todo", error);
        throw error;
    }
};

export const updateTodo = async (todo_id: number, todo: TodoUpdate): Promise<Todo> => {
    try {
        const response = await apiClient.put(`/todos/${todo_id}`, todo);
        console.log("[TODO] Updated todo:", response.data);
        return response.data;
    } catch (error) {
        console.error(`Error updating todo ${todo_id}`, error);
        throw error;
    }
};

export const deleteTodo = async (todo_id: number): Promise<Todo> => { // Backend returns the deleted item
    try {
        const response = await apiClient.delete(`/todos/${todo_id}`);
        console.log("[TODO] Deleted todo:", response.data);
        return response.data; // Return the data which is the deleted todo object
    } catch (error) {
        console.error(`Error deleting todo ${todo_id}`, error);
        throw error;
    }
};
