import React, { createContext, useContext, useState, useEffect } from 'react';
import { api } from '../utils/api';
const TasksSettingsContext = createContext({
tasksEnabled: true,
setTasksEnabled: () => {},
toggleTasksEnabled: () => {},
isTaskMasterInstalled: null,
isTaskMasterReady: null,
installationStatus: null,
isCheckingInstallation: true
});
export const useTasksSettings = () => {
const context = useContext(TasksSettingsContext);
if (!context) {
throw new Error('useTasksSettings must be used within a TasksSettingsProvider');
}
return context;
};
export const TasksSettingsProvider = ({ children }) => {
const [tasksEnabled, setTasksEnabled] = useState(() => {
const saved = localStorage.getItem('tasks-enabled');
return saved !== null ? JSON.parse(saved) : true;
});
const [isTaskMasterInstalled, setIsTaskMasterInstalled] = useState(null);
const [isTaskMasterReady, setIsTaskMasterReady] = useState(null);
const [installationStatus, setInstallationStatus] = useState(null);
const [isCheckingInstallation, setIsCheckingInstallation] = useState(true);
useEffect(() => {
localStorage.setItem('tasks-enabled', JSON.stringify(tasksEnabled));
}, [tasksEnabled]);
useEffect(() => {
const checkInstallation = async () => {
try {
const response = await api.get('/taskmaster/installation-status');
if (response.ok) {
const data = await response.json();
setInstallationStatus(data);
setIsTaskMasterInstalled(data.installation?.isInstalled || false);
setIsTaskMasterReady(data.isReady || false);
const userEnabledTasks = localStorage.getItem('tasks-enabled');
if (!data.installation?.isInstalled && !userEnabledTasks) {
setTasksEnabled(false);
}
} else {
console.error('Failed to check TaskMaster installation status');
setIsTaskMasterInstalled(false);
setIsTaskMasterReady(false);
}
} catch (error) {
console.error('Error checking TaskMaster installation:', error);
setIsTaskMasterInstalled(false);
setIsTaskMasterReady(false);
} finally {
setIsCheckingInstallation(false);
}
};
setTimeout(checkInstallation, 0);
}, []);
const toggleTasksEnabled = () => {
setTasksEnabled(prev => !prev);
};
const contextValue = {
tasksEnabled,
setTasksEnabled,
toggleTasksEnabled,
isTaskMasterInstalled,
isTaskMasterReady,
installationStatus,
isCheckingInstallation
};
return (
<TasksSettingsContext.Provider value={contextValue}>
{children}
</TasksSettingsContext.Provider>
);
};
export default TasksSettingsContext;