namespace AuthorBuddy.Web.Models; [Flags] public enum FileCategory { None = 0, Character = 1, Exposee = 2, Fact = 4, Document = 8 } public static class FileCategoryHelper { public static bool IsValid(FileCategory value) { if (value == FileCategory.None) return true; // Exposee and Document must be alone bool hasExposee = value.HasFlag(FileCategory.Exposee); bool hasDocument = value.HasFlag(FileCategory.Document); bool hasCharacter = value.HasFlag(FileCategory.Character); bool hasFact = value.HasFlag(FileCategory.Fact); if (hasExposee && value != FileCategory.Exposee) return false; if (hasDocument && value != FileCategory.Document) return false; // Charakter + Fakt is the only valid multi-category combination if (hasCharacter && hasFact && value == (FileCategory.Character | FileCategory.Fact)) return true; // Single categories are valid if (value is FileCategory.Character or FileCategory.Fact or FileCategory.Exposee or FileCategory.Document) return true; return false; } public static string DisplayName(FileCategory category) => category switch { FileCategory.Character => "Charakter", FileCategory.Exposee => "Exposé", FileCategory.Fact => "Fakt", FileCategory.Document => "Dokument", FileCategory.Character | FileCategory.Fact => "Charakter + Fakt", _ => "" }; public static string DisplayIcon(FileCategory category) => category switch { FileCategory.Character => "👤", FileCategory.Exposee => "📋", FileCategory.Fact => "📌", FileCategory.Document => "📄", FileCategory.Character | FileCategory.Fact => "👤📌", _ => "" }; public static string CssClass(FileCategory category) => category switch { FileCategory.Character => "category-character", FileCategory.Exposee => "category-exposee", FileCategory.Fact => "category-fact", FileCategory.Document => "category-document", FileCategory.Character | FileCategory.Fact => "category-character-fact", _ => "" }; }