"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateSiteSettingsSchema = void 0;
const zod_1 = require("zod");
const hexColor = zod_1.z.string().regex(/^#[0-9a-fA-F]{6}$/, 'Must be a hex color (e.g. #ff00ff)');
exports.updateSiteSettingsSchema = zod_1.z.object({
    // Organization
    organizationName: zod_1.z.string().min(1).max(100).optional(),
    organizationShortName: zod_1.z.string().min(1).max(10).optional(),
    organizationLogoUrl: zod_1.z.string().url().nullable().optional().or(zod_1.z.literal('')),
    organizationFaviconUrl: zod_1.z.string().url().nullable().optional().or(zod_1.z.literal('')),
    // Admin theme
    adminColorPrimary: hexColor.optional(),
    adminColorBgBase: hexColor.optional(),
    // Public theme
    publicColorPrimary: hexColor.optional(),
    publicColorBgBase: hexColor.optional(),
    publicColorBgContainer: hexColor.optional(),
    publicHeaderGradient: zod_1.z.string().max(500).optional(),
    // Text
    footerText: zod_1.z.string().max(200).optional(),
    loginSubtitle: zod_1.z.string().max(50).optional(),
    // Email branding
    emailFromName: zod_1.z.string().min(1).max(100).optional(),
    // SMTP configuration
    smtpHost: zod_1.z.string().max(255).optional(),
    smtpPort: zod_1.z.number().int().min(0).max(65535).optional(),
    smtpUser: zod_1.z.string().max(255).optional(),
    smtpPass: zod_1.z.string().max(500).optional(),
    smtpFromAddress: zod_1.z.string().max(255).optional(),
    smtpActiveProvider: zod_1.z.enum(['mailhog', 'production']).optional(),
    emailTestMode: zod_1.z.boolean().optional(),
    testEmailRecipient: zod_1.z.string().max(255).optional(),
    // Registration settings
    enablePublicRegistration: zod_1.z.boolean().optional(),
    enableEmailVerification: zod_1.z.boolean().optional(),
    autoApproveVerifiedUsers: zod_1.z.boolean().optional(),
    // Feature toggles
    enableInfluence: zod_1.z.boolean().optional(),
    enableMap: zod_1.z.boolean().optional(),
    enableNewsletter: zod_1.z.boolean().optional(),
    enableLandingPages: zod_1.z.boolean().optional(),
    enableMediaFeatures: zod_1.z.boolean().optional(),
    enablePayments: zod_1.z.boolean().optional(),
    enableGalleryAds: zod_1.z.boolean().optional(),
    enableChat: zod_1.z.boolean().optional(),
    enableEvents: zod_1.z.boolean().optional(),
    enableDocsComments: zod_1.z.boolean().optional(),
    enableSms: zod_1.z.boolean().optional(),
    enablePeople: zod_1.z.boolean().optional(),
    enableSocial: zod_1.z.boolean().optional(),
    enableMeet: zod_1.z.boolean().optional(),
    enableMeetingPlanner: zod_1.z.boolean().optional(),
    enableTicketedEvents: zod_1.z.boolean().optional(),
    enableSocialCalendar: zod_1.z.boolean().optional(),
    enableDocsCollaboration: zod_1.z.boolean().optional(),
    requireEventApproval: zod_1.z.boolean().optional(),
    autoSyncPeopleToMap: zod_1.z.boolean().optional(),
    // SMS connection config
    smsTermuxApiUrl: zod_1.z.string().max(500).optional(),
    smsTermuxApiKey: zod_1.z.string().max(500).optional(),
    smsTailscaleApiKey: zod_1.z.string().max(500).optional(),
    smsTailscaleTailnet: zod_1.z.string().max(200).optional(),
    smsTailscaleDeviceId: zod_1.z.string().max(200).optional(),
    smsTailscaleDeviceName: zod_1.z.string().max(200).optional(),
    // Gitea Docs Comments
    giteaApiToken: zod_1.z.string().max(500).optional(),
    giteaCommentsRepoOwner: zod_1.z.string().max(100).optional(),
    giteaCommentsRepoName: zod_1.z.string().max(100).optional(),
    giteaOauthClientId: zod_1.z.string().max(500).optional(),
    giteaOauthClientSecret: zod_1.z.string().max(500).optional(),
    // User Provisioning
    enableUserProvisioning: zod_1.z.boolean().optional(),
    provisionGitea: zod_1.z.boolean().optional(),
    provisionGiteaTiming: zod_1.z.enum(['lazy', 'eager']).optional(),
    provisionVaultwarden: zod_1.z.boolean().optional(),
    provisionVaultwardenTiming: zod_1.z.enum(['lazy', 'eager']).optional(),
    provisionListmonk: zod_1.z.boolean().optional(),
    provisionListmonkTiming: zod_1.z.enum(['lazy', 'eager']).optional(),
    // Auto-upgrade settings
    enableAutoUpgrade: zod_1.z.boolean().optional(),
    autoUpgradeSchedule: zod_1.z.enum([
        'daily-3am', 'daily-4am', 'daily-5am',
        'weekly-sun-3am', 'weekly-mon-3am', '12h', '24h',
    ]).optional(),
    autoUpgradePullServices: zod_1.z.boolean().optional(),
    notifyAdminAutoUpgrade: zod_1.z.boolean().optional(),
    // Navigation configuration (supports one level of nesting via groups)
    navConfig: zod_1.z.object({
        items: zod_1.z.array(zod_1.z.object({
            id: zod_1.z.string(),
            label: zod_1.z.string(),
            path: zod_1.z.string(),
            icon: zod_1.z.string(),
            enabled: zod_1.z.boolean(),
            order: zod_1.z.number(),
            type: zod_1.z.enum(['builtin', 'custom', 'group']),
            featureFlag: zod_1.z.string().optional(),
            external: zod_1.z.boolean().optional(),
            children: zod_1.z.array(zod_1.z.object({
                id: zod_1.z.string(),
                label: zod_1.z.string(),
                path: zod_1.z.string(),
                icon: zod_1.z.string(),
                enabled: zod_1.z.boolean(),
                order: zod_1.z.number(),
                type: zod_1.z.enum(['builtin', 'custom']),
                featureFlag: zod_1.z.string().optional(),
                external: zod_1.z.boolean().optional(),
            })).optional(),
        })),
    }).optional(),
    // Notification settings
    notifyAdminShiftSignup: zod_1.z.boolean().optional(),
    notifyAdminResponseSubmitted: zod_1.z.boolean().optional(),
    notifyAdminSignRequested: zod_1.z.boolean().optional(),
    notifyAdminShiftCancellation: zod_1.z.boolean().optional(),
    notifyVolunteerSessionSummary: zod_1.z.boolean().optional(),
    notifyVolunteerCancellation: zod_1.z.boolean().optional(),
    notifyVolunteerShiftReminder: zod_1.z.boolean().optional(),
    notifyVolunteerShiftThankYou: zod_1.z.boolean().optional(),
    notifyVolunteerReengagement: zod_1.z.boolean().optional(),
    reengagementInactiveDays: zod_1.z.number().int().min(1).max(365).optional(),
    reengagementCooldownDays: zod_1.z.number().int().min(1).max(365).optional(),
});
//# sourceMappingURL=settings.schemas.js.map