import express, { Request, Response } from "express"; import { storage } from "../storage"; const router = express.Router(); // GET /api/ai/settings router.get("/settings", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const settings = await storage.getAiSettings(userId); if (!settings) return res.status(200).json(null); return res.status(200).json({ id: settings.id, apiKey: settings.apiKey, openPhoneReply: settings.openPhoneReply ?? false, }); } catch (err) { return res.status(500).json({ error: "Failed to fetch AI settings", details: String(err) }); } }); // PUT /api/ai/settings router.put("/settings", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const { apiKey } = req.body; if (!apiKey?.trim()) { return res.status(400).json({ message: "apiKey is required" }); } const settings = await storage.upsertAiSettings(userId, apiKey.trim()); return res.status(200).json({ id: settings.id, apiKey: settings.apiKey }); } catch (err) { return res.status(500).json({ error: "Failed to save AI settings", details: String(err) }); } }); // GET /api/ai/advanced-settings router.get("/advanced-settings", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const openPhoneReply = await storage.getOpenPhoneReply(userId); return res.status(200).json({ openPhoneReply }); } catch (err) { return res.status(500).json({ error: "Failed to fetch advanced settings", details: String(err) }); } }); // PUT /api/ai/advanced-settings router.put("/advanced-settings", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const { openPhoneReply } = req.body; if (typeof openPhoneReply !== "boolean") { return res.status(400).json({ message: "openPhoneReply must be a boolean" }); } await storage.setOpenPhoneReply(userId, openPhoneReply); return res.status(200).json({ openPhoneReply }); } catch (err) { return res.status(500).json({ error: "Failed to save advanced settings", details: String(err) }); } }); // GET /api/ai/chat-templates router.get("/chat-templates", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const templates = await storage.getAiChatTemplates(userId); return res.status(200).json(templates); } catch (err) { return res.status(500).json({ error: "Failed to fetch AI chat templates", details: String(err) }); } }); // PUT /api/ai/chat-templates router.put("/chat-templates", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const { reminderGreeting, newPatientGreeting, generalFallback, rescheduleGreeting, reminderSms } = req.body; await storage.saveAiChatTemplates(userId, { reminderGreeting, newPatientGreeting, generalFallback, rescheduleGreeting, reminderSms }); const updated = await storage.getAiChatTemplates(userId); return res.status(200).json(updated); } catch (err) { return res.status(500).json({ error: "Failed to save AI chat templates", details: String(err) }); } }); export default router;