using Core.Abstractions;

namespace DomainObjects.Enumerations;

public class Roles : Enumeration {

  /// <summary>
  /// The most powerful user role because it gives you access to everything. As the website owner, this should be your role
  /// </summary>
  public static readonly Roles Admin = new(0, "Admin");

  /// <summary>
  /// This user is typically responsible for managing content. Editors can add, edit, publish, and delete any posts and media, including those written by other users. Editors can also moderate, edit, and delete comments, and add and edit categories and tags
  /// </summary>
  public static readonly Roles Editor = new(1, "Editor");

  /// <summary>
  /// Typically responsible for tasks related to writing content. They can create, edit, and publish their own posts. They can also delete their own posts (even when they’re already published), but cannot edit or delete posts written by other user
  /// </summary>
  public static readonly Roles Author = new(2, "Author");

  /// <summary>
  /// The contributor is a more basic version of the author role. Contributors can perform three tasks on your site: read all posts, create and edit their own posts, and delete their own posts. However, this role stops short of allowing them to directly publish their posts on your site. This gives you a chance to review and have final control over any content they create before it goes live
  /// </summary>
  public static readonly Roles Contributor = new(3, "Contributor");

  /// <summary>
  /// Assigned to new users if you enable registrations on your site. This role has the least number of permissions.  Users are only able to update their own profile, read the content on your site, and leave comments
  /// </summary>
  public static readonly Roles Subscriber = new(4, "Subscriber");

  /// <summary>
  /// Assigned to new customers when they create an account on your website. This role is basically equivalent to that of a normal blog subscriber, but customers can edit their own account information and view past or current orders
  /// </summary>
  public static readonly Roles Customer = new(5, "Customer");

  /// <summary>
  /// This allows the user to run the operations side of your store without the ability to edit back-end functionality like files and code. A manager has the same permissions as a customer, plus they’re also granted the ability to manage all settings within eCommerce, create/edit products, and access all eCommerce reports. Important: They ALSO have access to the site editor capabilities mentioned above
  /// </summary>
  public static readonly Roles ShopManager = new(6, "Shop manager");

  private Roles(int id, string displayName) : base(id, displayName) { }

}
