import { useTranslation } from "react-i18next"; import { ConfirmModal, ExportModal } from "../components"; import { useAppContext } from "../context"; import { getSystemLocale } from "../utils/formatters"; export function SettingsPage() { const { t, i18n } = useTranslation(); const { settings, setSettings, settingsLoading, // Email testing testEmail, testingEmail, testEmailResult, // Shoutrrr testing testShoutrrr, testingShoutrrr, testShoutrrrResult, // Export/Import exporting, importing, showExportModal, setShowExportModal, handleExport, handleImportFileSelect, showImportConfirm, setShowImportConfirm, setPendingImportData, handleImportConfirm, importResult, setImportResult, } = useAppContext(); return (
{settingsLoading ? (

{t("settings.loading")}

) : (
{/* Language */}

{t("settings.language.title")}

{/* Notifications */}

{t("settings.notifications.title")}

{t("settings.notifications.channels")}

{t("settings.notifications.email")}
{t("settings.notifications.push")}
{t("settings.notifications.stockReminders")}
{t("settings.notifications.intakeReminders")}
{t("settings.notifications.prescriptionReminders")}
{!settings.emailEnabled && !settings.shoutrrrEnabled && (

{t("settings.notifications.enableHint")}

)} {/* Skip reminders for taken doses */}
{/* Repeat reminders for missed doses */}
{/* Reminder interval (only shown when repeat is enabled) */} {settings.repeatRemindersEnabled && ( <>
setSettings({ ...settings, reminderRepeatIntervalMinutes: parseInt(e.target.value, 10) || 30 }) } style={{ width: "80px", textAlign: "center" }} />
{ const val = parseInt(e.target.value, 10); if (!Number.isNaN(val)) { setSettings({ ...settings, maxNaggingReminders: Math.max(1, Math.min(20, val)) }); } }} style={{ width: "80px", textAlign: "center" }} />
)}

{t("settings.stockReminder.title")}

{t("settings.notifications.email")}

{settings.emailEnabled && ( <>
{testEmailResult && ( {testEmailResult.message} )}
)}

{t("settings.notifications.push")}

{settings.shoutrrrEnabled && ( <>
{testShoutrrrResult && ( {testShoutrrrResult.message} )}
)}
{t("settings.schedule.title")}
{t("settings.schedule.stockCheck")} {t("settings.schedule.dailyAt6")}
{t("settings.schedule.intakeCheck")} {t("settings.schedule.15minBefore")}
{settings.nextScheduledCheck && (
{t("settings.schedule.nextCheck")} {new Date(settings.nextScheduledCheck).toLocaleString(getSystemLocale(i18n.language), { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })}
)} {settings.lastStockReminderSent && (
{t("settings.schedule.lastStockSent")} {new Date(settings.lastStockReminderSent).toLocaleString(getSystemLocale(i18n.language), { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })}
)} {settings.lastAutoEmailSent && (
{t("settings.schedule.lastIntakeSent")} {new Date(settings.lastAutoEmailSent).toLocaleString(getSystemLocale(i18n.language), { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })}
)} {settings.lastPrescriptionReminderSent && (
{t("settings.schedule.lastPrescriptionSent")} {new Date(settings.lastPrescriptionReminderSent).toLocaleString(getSystemLocale(i18n.language), { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })}
)}
{/* Stock Settings */}

{t("settings.stock.title")}

{t("settings.stock.calculationMode")}

{t("settings.stock.thresholds")}

{(settings.reminderDaysBefore >= settings.lowStockDays || settings.lowStockDays >= settings.highStockDays) && (

{t("settings.stock.thresholdValidation")}

)}
{t("settings.stock.shareStockStatus")}
{/* Export/Import Section */}

{t("exportImport.title")}

{/* Import Success Message */} {importResult && (
✓ {t("exportImport.importSuccess")} {t("exportImport.importSuccessDetails", { medications: importResult.medications, doses: importResult.doses, shares: importResult.shares, })}
)} {/* Export */}
{t("exportImport.exportTitle")} {t("exportImport.exportDesc")}
{/* Import */}
{t("exportImport.importTitle")} {t("exportImport.importDesc")}
)} {/* Import Confirmation Modal */} {showImportConfirm && (

{t("exportImport.confirmImportMessage")}

⚠️ {t("exportImport.confirmImportWarning")}

} confirmLabel={t("exportImport.confirmButton")} cancelLabel={t("exportImport.cancelButton")} onConfirm={handleImportConfirm} onCancel={() => { setShowImportConfirm(false); setPendingImportData(null); }} confirmVariant="danger" /> )} {/* Export Options Modal */} setShowExportModal(false)} onExport={handleExport} exporting={exporting} />
); }