{-# LANGUAGE NoDeriveAnyClass #-}
{-# LANGUAGE TemplateHaskell #-}

-- | Discord gateway intents
module Calamity.Gateway.Intents
    ( Intents(..)
    , intentGuilds
    , intentGuildMembers
    , intentGuildBans
    , intentGuildEmojis
    , intentGuildIntegrations
    , intentGuildWebhooks
    , intentGuildInvites
    , intentGuildVoiceStates
    , intentGuildPresences
    , intentGuildMessages
    , intentGuildMessageReactions
    , intentGuildMessageTyping
    , intentDirectMessages
    , intentDirectMessageReactions
    , intentDirectMessageTyping ) where

import           Data.Aeson    ( ToJSON )
import           Data.Bits
import           Data.Flags    ()
import           Data.Flags.TH
import           Data.Word

$(bitmaskWrapper "Intents" ''Word32 []
   [ ("intentGuilds", 1 `shiftL` 0)
   , ("intentGuildMembers", 1 `shiftL` 1)
   , ("intentGuildBans", 1 `shiftL` 2)
   , ("intentGuildEmojis", 1 `shiftL` 3)
   , ("intentGuildIntegrations", 1 `shiftL` 4)
   , ("intentGuildWebhooks", 1 `shiftL` 5)
   , ("intentGuildInvites", 1 `shiftL` 6)
   , ("intentGuildVoiceStates", 1 `shiftL` 7)
   , ("intentGuildPresences", 1 `shiftL` 8)
   , ("intentGuildMessages", 1 `shiftL` 9)
   , ("intentGuildMessageReactions", 1 `shiftL` 10)
   , ("intentGuildMessageTyping", 1 `shiftL` 11)
   , ("intentDirectMessages", 1 `shiftL` 12)
   , ("intentDirectMessageReactions", 1 `shiftL` 13)
   , ("intentDirectMessageTyping", 1 `shiftL` 14)])

deriving via Word32 instance ToJSON Intents