namespace CollabDAL.DTO.CollabConfig; public class CollabConfigDTO { public string DatabaseName { get; set; } = string.Empty; public int MaxParticipantsDefault { get; set; } = 10; public int MaxParticipantsAbsolute { get; set; } = 25; public int SessionTimeoutMinutes { get; set; } = 30; public int InviteLinkExpiryMinutes { get; set; } = 60; public bool AllowScreenShare { get; set; } = true; public bool AllowAnonymousJoin { get; set; } public bool AllowGuestJoinViaLink { get; set; } = true; public bool EnableAuditLog { get; set; } = true; public bool EnableCoBrowse { get; set; } = true; public bool EnableInSessionChat { get; set; } = true; public bool EnableAnnotations { get; set; } = true; public bool EnableCursorBroadcast { get; set; } = true; public bool EnableFormSync { get; set; } = true; public string ControlConsentMode { get; set; } = "RoleDependent"; public List? AllowedModules { get; set; } /// Returns default config when no tenant config row exists yet. public static CollabConfigDTO Default => new(); /// Projects to the client-safe subset sent on join. public CollabConfigClientDTO ToClientDTO() => new() { AllowScreenShare = AllowScreenShare, EnableCoBrowse = EnableCoBrowse, EnableInSessionChat = EnableInSessionChat, EnableAnnotations = EnableAnnotations, EnableCursorBroadcast = EnableCursorBroadcast, EnableFormSync = EnableFormSync, ControlConsentMode = ControlConsentMode, }; } /// Subset of config sent to client on JoinSession — no sensitive admin settings. public class CollabConfigClientDTO { public bool AllowScreenShare { get; set; } public bool EnableCoBrowse { get; set; } public bool EnableInSessionChat { get; set; } public bool EnableAnnotations { get; set; } public bool EnableCursorBroadcast { get; set; } public bool EnableFormSync { get; set; } public string ControlConsentMode { get; set; } = string.Empty; } public class UpdateCollabConfigSaveDTO : CollabConfigDTO { }