from enum import StrEnum


class Scope(StrEnum):
  # Keyword
  none = "none"
  Whole = "whole"

  # ----------------------------
  # Common Actions
  # ----------------------------

  Read = "read"
  Write = "write"
  Manage = "manage"

  # ----------------------------
  # Special Actions
  # ----------------------------

  Add = "add"

  Send = "send"

  Search = "search"

  Init = "init"
  Verify = "verify"

  Start = "start"
  Abort = "abort"
  Commit = "commit"

  Share = "share"
  Upload = "upload"
  Download = "download"

  Collect = "collect"
  Payment = "payment"

  Resolve = "resolve"
  Generate = "generate"

  Publish = "publish"
  Subscribe = "subscribe"

  # ----------------------------
  # Scoped Actions
  # ----------------------------

  # Auth
  ReadAuth = "read:auth"
  WriteAuth = "write:auth"
  ManageAuth = "manage:auth"
  ReadAuthApts = "read:auth:apts"
  WriteAuthApts = "write:auth:apts"
  ManageAuthApts = "manage:auth:apts"
  ReadAuthGrants = "read:auth:grants"
  WriteAuthGrants = "write:auth:grants"
  ManageAuthGrants = "manage:auth:grants"

  # Career
  ReadCareer = "read:career"
  WriteCareer = "write:career"
  ManageCareer = "manage:career"
  ReadCareerStocks = "read:career:stocks"
  WriteCareerStocks = "write:career:stocks"
  ManageCareerStocks = "manage:career:stocks"
  ReadCareerStores = "read:career:stores"
  WriteCareerStores = "write:career:stores"
  ManageCareerStores = "manage:career:stores"
  ReadCareerProducts = "read:career:products"
  WriteCareerProducts = "write:career:products"
  ManageCareerProducts = "manage:career:products"
  SearchCareerProducts = "search:career:products"
  ReadCareerBranches = "read:career:branches"
  WriteCareerBranches = "write:career:branches"
  ManageCareerBranches = "manage:career:branches"
  ReadCareerServices = "read:career:services"
  WriteCareerServices = "write:career:services"
  ManageCareerServices = "manage:career:services"
  ReadCareerCustomers = "read:career:customers"
  WriteCareerCustomers = "write:career:customers"
  ManageCareerCustomers = "manage:career:customers"
  ReadCareerEmployees = "read:career:employees"
  WriteCareerEmployees = "write:career:employees"
  ManageCareerEmployees = "manage:career:employees"
  ReadCareerBusinesses = "read:career:businesses"
  WriteCareerBusinesses = "write:career:businesses"
  ManageCareerBusinesses = "manage:career:businesses"

  # Content
  ReadContent = "read:content"
  WriteContent = "write:content"
  ManageContent = "manage:content"
  ReadContentNotes = "read:content:notes"
  WriteContentNotes = "write:content:notes"
  ManageContentNotes = "manage:content:notes"
  ReadContentPosts = "read:content:posts"
  WriteContentPosts = "write:content:posts"
  ManageContentPosts = "manage:content:posts"
  SearchContentPosts = "search:content:posts"
  ReadContentTickets = "read:content:tickets"
  WriteContentTickets = "write:content:tickets"
  ManageContentTickets = "manage:content:tickets"

  # Conjoint
  AddConjoint = "add:conjoint"
  SendConjoint = "send:conjoint"
  ReadConjoint = "read:conjoint"
  WriteConjoint = "write:conjoint"
  ManageConjoint = "manage:conjoint"
  AddConjointMembers = "add:conjoint:members"
  ReadConjointMembers = "read:conjoint:members"
  WriteConjointMembers = "write:conjoint:members"
  ManageConjointMembers = "manage:conjoint:members"
  ReadConjointAccounts = "read:conjoint:accounts"
  WriteConjointAccounts = "write:conjoint:accounts"
  ManageConjointAccounts = "manage:conjoint:accounts"
  GenerateConjointAccounts = "generate:conjoint:accounts"
  ReadConjointChannels = "read:conjoint:channels"
  WriteConjointChannels = "write:conjoint:channels"
  ManageConjointChannels = "manage:conjoint:channels"
  AddConjointContacts = "add:conjoint:contacts"
  ReadConjointContacts = "read:conjoint:contacts"
  WriteConjointContacts = "write:conjoint:contacts"
  ManageConjointContacts = "manage:conjoint:contacts"
  SendConjointMessages = "send:conjoint:messages"
  ReadConjointMessages = "read:conjoint:messages"
  WriteConjointMessages = "write:conjoint:messages"
  ManageConjointMessages = "manage:conjoint:messages"
  SearchConjointMessages = "search:conjoint:messages"

  # Context
  ReadContext = "read:context"
  WriteContext = "write:context"
  ManageContext = "manage:context"
  ReadContextConfigs = "read:context:configs"
  WriteContextConfigs = "write:context:configs"
  ManageContextConfigs = "manage:context:configs"
  ReadContextSettings = "read:context:settings"
  WriteContextSettings = "write:context:settings"
  ManageContextSettings = "manage:context:settings"

  # Domain
  ReadDomain = "read:domain"
  WriteDomain = "write:domain"
  ManageDomain = "manage:domain"
  ReadDomainApps = "read:domain:apps"
  WriteDomainApps = "write:domain:apps"
  ManageDomainApps = "manage:domain:apps"
  ReadDomainClients = "read:domain:clients"
  WriteDomainClients = "write:domain:clients"
  ManageDomainClients = "manage:domain:clients"

  # Essential
  ReadEssential = "read:essential"
  WriteEssential = "write:essential"
  ManageEssential = "manage:essential"
  ReadEssentialSagas = "read:essential:sagas"
  WriteEssentialSagas = "write:essential:sagas"
  ManageEssentialSagas = "manage:essential:sagas"
  StartEssentialSagas = "start:essential:sagas"
  AddEssentialSagas = "add:essential:sagas"
  AbortEssentialSagas = "abort:essential:sagas"
  CommitEssentialSagas = "commit:essential:sagas"
  ReadEssentialSagaStages = "read:essential:saga-stages"
  WriteEssentialSagaStages = "write:essential:saga-stages"
  ManageEssentialSagaStages = "manage:essential:saga-stages"

  # Financial
  ReadFinancial = "read:financial"
  WriteFinancial = "write:financial"
  ManageFinancial = "manage:financial"
  ReadFinancialWallets = "read:financial:wallets"
  WriteFinancialWallets = "write:financial:wallets"
  ManageFinancialWallets = "manage:financial:wallets"
  ReadFinancialAccounts = "read:financial:accounts"
  WriteFinancialAccounts = "write:financial:accounts"
  ManageFinancialAccounts = "manage:financial:accounts"
  ReadFinancialInvoices = "read:financial:invoices"
  WriteFinancialInvoices = "write:financial:invoices"
  ManageFinancialInvoices = "manage:financial:invoices"
  PaymentFinancialInvoices = "payment:financial:invoices"
  ReadFinancialCurrencies = "read:financial:currencies"
  WriteFinancialCurrencies = "write:financial:currencies"
  ManageFinancialCurrencies = "manage:financial:currencies"
  ReadFinancialTransactions = "read:financial:transactions"
  WriteFinancialTransactions = "write:financial:transactions"
  ManageFinancialTransactions = "manage:financial:transactions"
  InitFinancialTransaction = "init:financial:transactions"
  AbortFinancialTransaction = "abort:financial:transactions"
  VerifyFinancialTransaction = "verify:financial:transactions"

  # General
  ReadGeneral = "read:general"
  WriteGeneral = "write:general"
  ManageGeneral = "manage:general"
  ReadGeneralEvents = "read:general:events"
  WriteGeneralEvents = "write:general:events"
  ManageGeneralEvents = "manage:general:events"
  ReadGeneralComments = "read:general:comments"
  WriteGeneralComments = "write:general:comments"
  ManageGeneralComments = "manage:general:comments"
  ReadGeneralArtifacts = "read:general:artifacts"
  WriteGeneralArtifacts = "write:general:artifacts"
  ManageGeneralArtifacts = "manage:general:artifacts"
  ReadGeneralWorkflows = "read:general:workflows"
  WriteGeneralWorkflows = "write:general:workflows"
  ManageGeneralWorkflows = "manage:general:workflows"
  ReadGeneralActivities = "read:general:activities"
  WriteGeneralActivities = "write:general:activities"
  ManageGeneralActivities = "manage:general:activities"

  # Identity
  ReadIdentity = "read:identity"
  WriteIdentity = "write:identity"
  ManageIdentity = "manage:identity"
  ReadIdentityUsers = "read:identity:users"
  WriteIdentityUsers = "write:identity:users"
  ManageIdentityUsers = "manage:identity:users"
  ReadIdentityProfiles = "read:identity:profiles"
  WriteIdentityProfiles = "write:identity:profiles"
  ManageIdentityProfiles = "manage:identity:profiles"
  ReadIdentitySessions = "read:identity:sessions"
  WriteIdentitySessions = "write:identity:sessions"
  ManageIdentitySessions = "manage:identity:sessions"

  # Logistic
  ReadLogistic = "read:logistic"
  WriteLogistic = "write:logistic"
  ManageLogistic = "manage:logistic"
  ResolveLogistic = "resolve:logistic"
  ReadLogisticCargoes = "read:logistic:cargoes"
  WriteLogisticCargoes = "write:logistic:cargoes"
  ManageLogisticCargoes = "manage:logistic:cargoes"
  ReadLogisticDrivers = "read:logistic:drivers"
  WriteLogisticDrivers = "write:logistic:drivers"
  ManageLogisticDrivers = "manage:logistic:drivers"
  ReadLogisticTravels = "read:logistic:travels"
  WriteLogisticTravels = "write:logistic:travels"
  ManageLogisticTravels = "manage:logistic:travels"
  ReadLogisticVehicles = "read:logistic:vehicles"
  WriteLogisticVehicles = "write:logistic:vehicles"
  ManageLogisticVehicles = "manage:logistic:vehicles"
  ReadLogisticLocations = "read:logistic:locations"
  WriteLogisticLocations = "write:logistic:locations"
  ResolveLogisticTravels = "resolve:logistic:travels"
  ManageLogisticLocations = "manage:logistic:locations"
  ResolveLogisticLocations = "resolve:logistic:locations"

  # Special
  ReadSpecial = "read:special"
  WriteSpecial = "write:special"
  ManageSpecial = "manage:special"
  ShareSpecial = "share:special"
  ReadSpecialFiles = "read:special:files"
  WriteSpecialFiles = "write:special:files"
  ManageSpecialFiles = "manage:special:files"
  UploadSpecialFiles = "upload:special:files"
  DownloadSpecialFiles = "download:special:files"
  ShareSpecialFiles = "share:special:files"
  ReadSpecialStats = "read:special:stats"
  WriteSpecialStats = "write:special:stats"
  ManageSpecialStats = "manage:special:stats"
  CollectSpecialStats = "collect:special:stats"

  # Touch
  SendTouch = "send:touch"
  ReadTouch = "read:touch"
  WriteTouch = "write:touch"
  ManageTouch = "manage:touch"
  ReadTouchSmss = "read:touch:smss"
  WriteTouchSmss = "write:touch:smss"
  ManageTouchSmss = "manage:touch:smss"
  SendTouchSmss = "send:touch:smss"
  ReadTouchEmails = "read:touch:emails"
  WriteTouchEmails = "write:touch:emails"
  ManageTouchEmails = "manage:touch:emails"
  SendTouchEmails = "send:touch:emails"
  ReadTouchPushes = "read:touch:pushes"
  WriteTouchPushes = "write:touch:pushes"
  ManageTouchPushes = "manage:touch:pushes"
  SendTouchPushes = "send:touch:pushes"
  ReadTouchNotices = "read:touch:notices"
  WriteTouchNotices = "write:touch:notices"
  ManageTouchNotices = "manage:touch:notices"
  ReadTouchPusHistories = "read:touch:push-histories"
  WriteTouchPusHistories = "write:touch:push-histories"
  ManageTouchPusHistories = "manage:touch:push-histories"

  # Thing
  ReadThing = "read:thing"
  WriteThing = "write:thing"
  ManageThing = "manage:thing"
  ReadThingDevices = "read:thing:devices"
  WriteThingDevices = "write:thing:devices"
  ManageThingDevices = "manage:thing:devices"
  ReadThingSensors = "read:thing:sensors"
  WriteThingSensors = "write:thing:sensors"
  ManageThingSensors = "manage:thing:sensors"
  ReadThingMetrics = "read:thing:metrics"
  WriteThingMetrics = "write:thing:metrics"
  ManageThingMetrics = "manage:thing:metrics"
