using System.ComponentModel.DataAnnotations;

namespace eSuite.Core.Security;

/// <summary>
/// This is the master list of security access rights.
/// WARNING: Do not remove items from this list EVER.
/// You may mark an item with the [Obsolete] Attribute when it is no longer in use by the rest of the source code.
/// </summary>
public enum SecurityAccess
{
    [Hidden]
    [Display(Name = "Everyone", Description = "Can do something that everyone can do", GroupName = "Everyone")]
    Everyone = 0,

    [Display(Name = "Add User", Description = "Able to create a new user account", GroupName = "User")]
    AddUser = 1,

    [Display(Name = "Edit User", Description = "Able to modify other user accounts", GroupName = "User")]
    EditUser = 2,

    [Display(Name = "Delete User", Description = "Able to deactivate a users account", GroupName = "User")]
    DeleteUser = 3,

    [Display(Name = "View User", Description = "Able to view one or more user account(s)", GroupName = "User")]
    ViewUser = 4,
    
    [Display(Name = "Resend Confirm Email", Description = "Able to resend confirm email to the user", GroupName = "User")]
    ResendConfirmMail = 5,
    
    [Display(Name = "View Specification", Description = "Able to view one or more specification(s)", GroupName = "Specification")]
    ViewSpecification = 6,
    
    [Display(Name = "View Template For PrintSpec", Description = "Able to view template for specification(s)", GroupName = "Specification")]
    ViewTemplateForPrintSpec = 7,
    
    [Display(Name = "Add Specification", Description = "Able to create a new specification", GroupName = "Specification")]
    AddSpecification = 8,
    
    [Display(Name = "Edit Specification", Description = "Able to make changes to specification", GroupName = "Specification")]
    EditSpecification = 9,
    
    [Display(Name = "Delete Specification", Description = "Able to remove a specification", GroupName = "Specification")]
    DeleteSpecification = 10,
    
    [Display(Name = "View Site", Description = "Able to view one or more site(s)", GroupName = "Site")]
    ViewSite = 11,
    
    [Display(Name = "Add Site", Description = "Able to create a new site", GroupName = "Site")]
    AddSite = 12,
    
    [Display(Name = "Edit Site", Description = "Able to make changes to a site", GroupName = "Site")]
    EditSite = 13,
    
    [Display(Name = "Delete Site", Description = "Able to remove a site", GroupName = "Site")]
    DeleteSite = 14,

    [Display(Name = "View Sequence", Description = "Able to view one or more sequence(s)", GroupName = "Sequence")]
    ViewSequence = 15,

    [Display(Name = "Add Sequence", Description = "Able to create a new sequence", GroupName = "Sequence")]
    AddSequence = 16,

    [Display(Name = "Edit Sequence", Description = "Able to make changes to a sequence", GroupName = "Sequence")]
    EditSequence = 17,

    [Display(Name = "Delete Sequence", Description = "Able to remove a sequence", GroupName = "Sequence")]
    DeleteSequence = 18,

    [Hidden]
    [Display(Name = "Next Sequence Value", Description = "Able to view next sequence value", GroupName = "Sequence")]
    NextSequenceValue = 19,

    [Display(Name = "View Role", Description = "Able to view one or more role(s)", GroupName = "Role")]
    ViewRole = 20,

    [Display(Name = "Add Role", Description = "Able to create a new role", GroupName = "Role")]
    AddRole = 21,

    [Display(Name = "Edit Role", Description = "Able to make changes to a role", GroupName = "Role")]
    EditRole = 22,

    [Display(Name = "Delete Role", Description = "Able to remove a role", GroupName = "Role")]
    DeleteRole = 23,

    [Display(Name = "View Role Users", Description = "Able to view one or more role user(s)", GroupName = "Role")]
    ViewRoleUsers = 24,

    [Display(Name = "Add Role User", Description = "Able to add a new role user", GroupName = "Role")]
    AddRoleUser = 25,

    [Display(Name = "Delete Role User", Description = "Able to remove a role user", GroupName = "Role")]
    DeleteRoleUser = 26,

    [Hidden]
    [Display(Name = "View Access List", Description = "Able to view access list", GroupName = "Role")]
    ViewAccessList = 27,

    [Display(Name = "View Role Access", Description = "Able to view role access", GroupName = "Role")]
    ViewRoleAccess = 28,

    [Display(Name = "Edit Role Access", Description = "Able to edit role access", GroupName = "Role")]
    EditRoleAccess = 29,

    [Hidden]
    [Display(Name = "Delete Role Access", Description = "Able to remove role access", GroupName = "Role")]
    DeleteRoleAccess = 30,

    [Display(Name = "View Organisation", Description = "Able to view one or more organisation(s)", GroupName = "Organisation")]
    ViewOrganisation = 31,

    [Display(Name = "Add Organisation", Description = "Able to create a new organisation", GroupName = "Organisation")]
    AddOrganisation = 32,

    [Display(Name = "Edit Organisation", Description = "Able to make changes to an organisation", GroupName = "Organisation")]
    EditOrganisation = 33,

    [Display(Name = "Delete Organisation", Description = "Able to remove an organisation", GroupName = "Organisation")]
    DeleteOrganisation = 34,

    [Obsolete("Viewing mail template types is not a protected activity")]
    [Display(Name = "View Mail Template Types", Description = "Able to view one or more mail template types", GroupName = "MailTemplate")]
    ViewMailTemplateTypes = 35,

    [Hidden]
    [Display(Name = "View Mail Template", Description = "Able to view one or more mail template(s)", GroupName = "MailTemplate")]
    ViewMailTemplate = 36,

    [Hidden]
    [Display(Name = "Add Mail Template", Description = "Able to add a new mail template", GroupName = "MailTemplate")]
    AddMailTemplate = 37,

    [Display(Name = "View Glossary", Description = "Able to view one or more glossary items", GroupName = "Glossary")]
    ViewGlossary = 38,

    [Display(Name = "Add Glossary", Description = "Able to create a new glossary item", GroupName = "Glossary")]
    AddGlossary = 39,

    [Display(Name = "Edit Glossary", Description = "Able to make changes to a glossary item", GroupName = "Glossary")]
    EditGlossary = 40,

    [Display(Name = "Delete Glossary", Description = "Able to remove a glossary item", GroupName = "Glossary")]
    DeleteGlossary = 41,

    [Display(Name = "View Form Template", Description = "Able to view one or more form template(s)", GroupName = "Form")]
    ViewFormTemplate = 42,

    [Display(Name = "Add Form Template", Description = "Able to create a new form template", GroupName = "Form")]
    AddFormTemplate = 43,

    [Display(Name = "Edit Form Template", Description = "Able to make changes to a form template", GroupName = "Form")]
    EditFormTemplate = 44,

    [Display(Name = "Delete Form Template", Description = "Able to remove a form template", GroupName = "Form")]
    DeleteFormTemplate = 45,

    [Hidden]
    [Display(Name = "View Form Instance", Description = "Able to view one or more form instance(s)", GroupName = "Form")]
    ViewFormInstance = 46,

    [Hidden]
    [Display(Name = "Add Form Instance", Description = "Able to add a new form instance", GroupName = "Form")]
    AddFormInstance = 47,

    [Hidden]
    [Display(Name = "Edit Form Instance", Description = "Able to make changes to a form instance", GroupName = "Form")]
    EditFormInstance = 48,

    [Display(Name = "View Domain", Description = "Able to view one or more domain(s)", GroupName = "Domain")]
    ViewDomain = 49,

    [Display(Name = "Add Domain", Description = "Able to create a new domain", GroupName = "Domain")]
    AddDomain = 50,

    [Display(Name = "Edit Domain", Description = "Able to make changes to a domain", GroupName = "Domain")]
    EditDomain = 51,

    [Display(Name = "Delete Domain", Description = "Able to remove a domain", GroupName = "Domain")]
    DeleteDomain = 52,

    [Display(Name = "View Field", Description = "Able to view one or more field(s)", GroupName = "CustomField")]
    ViewField = 53,

    [Display(Name = "Add Field", Description = "Able to create a new field", GroupName = "CustomField")]
    AddField = 54,

    [Display(Name = "Edit Field", Description = "Able to make changes to a field", GroupName = "CustomField")]
    EditField = 55,

    [Display(Name = "Delete Field", Description = "Able to remove a field", GroupName = "CustomField")]
    DeleteField = 56,

    [Display(Name = "View Audit Log", Description = "Able to view one or more audit log(s)", GroupName = "AuditLog")]
    ViewAuditLog = 57,

    [Display(Name = "View Blocked IP Address", Description = "Able to view one or more blocked IP addresses", GroupName = "BlockedIPAddresses")]
    ViewBlockedIPAddresses = 58,

    [Display(Name = "UnBlock IP Address", Description = "Able to unblock blocked IP address", GroupName = "BlockedIPAddresses")]
    UnlockIPAddress = 59,

    [Display(Name = "View Error Logs", Description = "Able to view error log(s)", GroupName = "ErrorLogs")]
    ViewErrorLogs = 60,

    [Display(Name = "Get Current Email Action Url", Description = "Get the current URL for a supplied user (note this is intended to internal use only)", GroupName = "User")]
    GetCurrentEmailActionUrl = 61,

    [Display(Name = "View SsoProvider details", Description = "Get the details of the SsoProviders used for single sign on", GroupName = "SsoProvider")]
    ViewSsoProviders = 62,

    [Display(Name = "Add SsoProvider details", Description = "Add a new Single Sign On provider", GroupName = "SsoProvider")]
    AddSsoProvider = 63,

    [Display(Name = "Edit SsoProvider details", Description = "Edit an existing Single Sign On provider", GroupName = "SsoProvider")]
    EditSsoProvider = 64,

    [Display(Name = "Delete SsoProvider", Description = "Delete existing Single Sign On provider", GroupName = "SsoProvider")]
    DeleteSsoProvider = 65,
       
    [Display(Name = "ImportGMGProfiles", Description = "ImportGMGProfiles", GroupName = "Internal Maintenance")]
    ImportGMGProfiles = 66,

    [Display(Name = "ClearOldEmailActions", Description = "ClearOldEmailActions", GroupName = "Internal Maintenance")]
    ClearOldEmailActions = 67,

    [Display(Name = "ClearOldPerformanceData", Description = "ClearOldPerformanceData", GroupName = "Internal Maintenance")]
    ClearOldPerformanceData = 68,

    [Display(Name = "ClearOldSentinelData", Description = "ClearOldSentinelData", GroupName = "Internal Maintenance")]
    ClearOldSentinelData = 69,

    [Display(Name = "ClearOldSingleUserGuids", Description = "ClearOldSingleUserGuids", GroupName = "Internal Maintenance")]
    ClearOldSingleUserGuids = 70,

    [Display(Name = "ImportPrintSpecifications", Description = "ImportPrintSpecifications", GroupName = "Internal Maintenance")]
    ImportPrintSpecifications = 71,

    [Display(Name = "SyncEFlowPrinterCategories", Description = "SyncEFlowPrinterCategories", GroupName = "Internal Maintenance")]
    SyncEFlowPrinterCategories = 72,

    [Display(Name = "ViewWorkflowTemplates", Description = "View Workflow Templates", GroupName = "Workflow Templates")]
    ViewWorkflowTemplates = 73,

    [Display(Name = "EditWorkflowTemplate", Description = "Edit Workflow Templates", GroupName = "Workflow Templates")]
    EditWorkflowTemplate = 74,

    [Display(Name = "EditWorkflowTemplate", Description = "Add Workflow Templates", GroupName = "Workflow Templates")]
    AddWorkflowTemplate = 75,

    [Display(Name = "EditWorkflowTemplate", Description = "Delete Workflow Templates", GroupName = "Workflow Templates")]
    DeleteWorkflowTemplate = 76,

    [Display(Name = "CreateActivity", Description = "Create an activity based on a Workflow Template", GroupName = "Activities")]
    CreateActivity = 77,
        
    [Display(Name = "ViewTasks", Description = "View activity tasks that are in progress", GroupName = "Activities")]
    ViewTasks = 78
}