/**
* @module Config
* @category State
*/
import { create } from "zustand";
/**
* @config
* Store de Zustand para gestionar el estado de un proyecto y sus tareas.
*
* @typedef {Object} ProjectStore
* @property {boolean} loading - Indica si el proyecto está cargando.
* @property {Object|null} project - Datos del proyecto actual.
* @property {Array} todoTasks - Lista de tareas pendientes.
* @property {Array} inProgressTasks - Lista de tareas en progreso.
* @property {Array} toReviewTasks - Lista de tareas en revisión.
* @property {Array} doneTasks - Lista de tareas completadas.
* @property {function} setLoading - Función para actualizar el estado de carga.
* @property {function} setProject - Función para establecer el proyecto actual.
* @property {function} setTodoTasks - Función para actualizar las tareas pendientes.
* @property {function} setInProgressTasks - Función para actualizar las tareas en progreso.
* @property {function} setToReviewTasks - Función para actualizar las tareas en revisión.
* @property {function} setDoneTasks - Función para actualizar las tareas completadas.
* @property {function} clearProject - Función para limpiar el proyecto actual.
*/
/**
* Hook personalizado para acceder y modificar el estado de un proyecto y sus tareas.
*
* @type {import('zustand').UseStore<ProjectStore>}
*/
export const useProjectStore = create((set) => ({
loading: true,
project: null,
todoTasks: [],
inProgressTasks: [],
toReviewTasks: [],
doneTasks: [],
/**
* Actualiza el estado de carga del proyecto.
* @param {boolean} loading - Nuevo estado de carga.
*/
setLoading: (loading) => set({ loading }),
/**
* Establece los datos del proyecto actual.
* @param {Object} project - Datos del proyecto.
*/
setProject: (project) => set({ project }),
/**
* Actualiza la lista de tareas pendientes.
* @param {Array} tasks - Nueva lista de tareas pendientes.
*/
setTodoTasks: (tasks) => set({ todoTasks: tasks }),
/**
* Actualiza la lista de tareas en progreso.
* @param {Array} tasks - Nueva lista de tareas en progreso.
*/
setInProgressTasks: (tasks) => set({ inProgressTasks: tasks }),
/**
* Actualiza la lista de tareas en revisión.
* @param {Array} tasks - Nueva lista de tareas en revisión.
*/
setToReviewTasks: (tasks) => set({ toReviewTasks: tasks }),
/**
* Actualiza la lista de tareas completadas.
* @param {Array} tasks - Nueva lista de tareas completadas.
*/
setDoneTasks: (tasks) => set({ doneTasks: tasks }),
/**
* Limpia los datos del proyecto actual.
*/
clearProject: () => set({ project: null }),
}));