{- This file is part of irc-fun-messages.
 -
 - Written in 2015, 2016 by fr33domlover <fr33domlover@riseup.net>.
 -
 - ♡ Copying is an act of love. Please copy, reuse and share.
 -
 - The author(s) have dedicated all copyright and related and neighboring
 - rights to this software to the public domain worldwide. This software is
 - distributed without any warranty.
 -
 - You should have received a copy of the CC0 Public Domain Dedication along
 - with this software. If not, see
 - <http://creativecommons.org/publicdomain/zero/1.0/>.
 -}

module Network.Irc.Messages.Internal.Types
    ( -- * Type Aliases And Newtypes
      Regex
      -- * Reply
    , CommandResponseCode (..)
    , ErrorReplyCode (..)
    , ReservedReplyCode (..)
    , ReservedErrorCode (..)
    )
where

import Text.Regex.Applicative (RE)

-- | TODO
type Regex = RE Char

-------------------------------------------------------------------------------
-- Reply
-------------------------------------------------------------------------------

-- | TODO
data CommandResponseCode
    -- | TODO
    = ReplyWelcome
    -- | TODO
    | ReplyYourHost
    -- | TODO
    | ReplyCreated
    -- | TODO
    | ReplyMyInfo
    -- | TODO
    | ReplyBounce
    -- | TODO
    | ReplyUserHost
    -- | TODO
    | ReplyIsOn
    -- | TODO
    | ReplyAway
    -- | TODO
    | ReplyUnAway
    -- | TODO
    | ReplyNoAway
    -- | TODO
    | ReplyWhoIsUser
    -- | TODO
    | ReplyWhoIsServer
    -- | TODO
    | ReplyWhoIsOperator
    -- | TODO
    | ReplyWhoIsIdle
    -- | TODO
    | ReplyEndOfWhoIs
    -- | TODO
    | ReplyWhoIsChannels
    -- | TODO
    | ReplyWhoWasUser
    -- | TODO
    | ReplyEndOfWhoWas
    -- | TODO
    | ReplyListStart
    -- | TODO
    | ReplyList
    -- | TODO
    | ReplyListEnd
    -- | TODO
    | ReplyUniqueOpIs
    -- | TODO
    | ReplyChannelModeIs
    -- | TODO
    | ReplyNoTopic
    -- | TODO
    | ReplyTopic
    -- | TODO
    | ReplyInviting
    -- | TODO
    | ReplySummoning
    -- | TODO
    | ReplyInviteList
    -- | TODO
    | ReplyEndOfInviteList
    -- | TODO
    | ReplyExceptList
    -- | TODO
    | ReplyEndOfExceptList
    -- | TODO
    | ReplyVersion
    -- | TODO
    | ReplyWhoReply
    -- | TODO
    | ReplyEndOfWho
    -- | TODO
    | ReplyNameReply
    -- | TODO
    | ReplyEndOfNames
    -- | TODO
    | ReplyLinks
    -- | TODO
    | ReplyEndOfLinks
    -- | TODO
    | ReplyBanList
    -- | TODO
    | ReplyEndOfBanList
    -- | TODO
    | ReplyInfo
    -- | TODO
    | ReplyEndOfInfo
    -- | TODO
    | ReplyMotdStart
    -- | TODO
    | ReplyMessageOfTheDay
    -- | TODO
    | ReplyEndOfMessageOfTheDay
    -- | TODO
    | ReplyYoureOper
    -- | TODO
    | ReplyRehashing
    -- | TODO
    | ReplyYoureService
    -- | TODO
    | ReplyTime
    -- | TODO
    | ReplyUsersStart
    -- | TODO
    | ReplyUsers
    -- | TODO
    | ReplyEndOfUsers
    -- | TODO
    | ReplyNoUsers
    -- | TODO
    | ReplyTraceLink
    -- | TODO
    | ReplyTraceConnecting
    -- | TODO
    | ReplyTraceHandshake
    -- | TODO
    | ReplyTraceUnknown
    -- | TODO
    | ReplyTraceOperator
    -- | TODO
    | ReplyTraceUser
    -- | TODO
    | ReplyTraceServer
    -- | TODO
    | ReplyTraceService
    -- | TODO
    | ReplyTraceNewType
    -- | TODO
    | ReplyTraceClass
    -- | TODO
    | ReplyTraceReconnect
    -- | TODO
    | ReplyTraceLog
    -- | TODO
    | ReplyTraceEnd
    -- | TODO
    | ReplyStatsLinkInfo
    -- | TODO
    | ReplyStatsCommands
    -- | TODO
    | ReplyEndOfStats
    -- | TODO
    | ReplyStatsUptime
    -- | TODO
    | ReplyStatsOLine
    -- | TODO
    | ReplyUModeIs
    -- | TODO
    | ReplyServList
    -- | TODO
    | ReplyServListEnd
    -- | TODO
    | ReplyLuserClient
    -- | TODO
    | ReplyLuserOp
    -- | TODO
    | ReplyLuserUnknown
    -- | TODO
    | ReplyLuserChannels
    -- | TODO
    | ReplyLuserMe
    -- | TODO
    | ReplyAdminMe
    -- | TODO
    | ReplyAdminLocation1
    -- | TODO
    | ReplyAdminLocation2
    -- | TODO
    | ReplyAdminEmail
    -- | TODO
    | ReplyTryAgain
    -- | TODO
    | ReplyFreenodeISupport
    deriving (Eq, Show)

data ErrorReplyCode
    -- | TODO
    = ErrorNoSuchNick
    -- | TODO
    | ErrorNoSuchServer
    -- | TODO
    | ErrorNoSuchChannel
    -- | TODO
    | ErrorCannotSendToChannel
    -- | TODO
    | ErrorTooManyChannels
    -- | TODO
    | ErrorWasNoSuchNick
    -- | TODO
    | ErrorTooManyTargets
    -- | TODO
    | ErrorNoSuchService
    -- | TODO
    | ErrorNoOrigin
    -- | TODO
    | ErrorNoRecipient
    -- | TODO
    | ErrorNoTextToSend
    -- | TODO
    | ErrorNoTopLevel
    -- | TODO
    | ErrorWildTopLevel
    -- | TODO
    | ErrorBadMask
    -- | TODO
    | ErrorUnknownCommand
    -- | TODO
    | ErrorNoMessageOfTheDay
    -- | TODO
    | ErrorNoAdminInfo
    -- | TODO
    | ErrorFileError
    -- | TODO
    | ErrorNoNicknameGiven
    -- | TODO
    | ErrorErroneousNickname
    -- | TODO
    | ErrorNicknameInUse
    -- | TODO
    | ErrorNickCollision
    -- | TODO
    | ErrorUnavailableResource
    -- | TODO
    | ErrorUserNotInChannel
    -- | TODO
    | ErrorNotOnChannel
    -- | TODO
    | ErrorUserOnChannel
    -- | TODO
    | ErrorNoLogin
    -- | TODO
    | ErrorSummonDisabled
    -- | TODO
    | ErrorUsersDisabled
    -- | TODO
    | ErrorNotRegistered
    -- | TODO
    | ErrorNeedMoreParams
    -- | TODO
    | ErrorAlreadyRegistered
    -- | TODO
    | ErrorNoPermissionForHost
    -- | TODO
    | ErrorPasswordMismatch
    -- | TODO
    | ErrorYoureBannedCreep
    -- | TODO
    | ErrorYouWillBeBanned
    -- | TODO
    | ErrorKeySet
    -- | TODO
    | ErrorChannelIsFull
    -- | TODO
    | ErrorUnknownMode
    -- | TODO
    | ErrorInviteOnlyChannel
    -- | TODO
    | ErrorBannedFromChannel
    -- | TODO
    | ErrorBadChannelKey
    -- | TODO
    | ErrorBadChannelMask
    -- | TODO
    | ErrorNoChannelModes
    -- | TODO
    | ErrorBanListFull
    -- | TODO
    | ErrorNoPrivileges
    -- | TODO
    | ErrorChannelOpPrivilegesNeeded
    -- | TODO
    | ErrorCantKillServer
    -- | TODO
    | ErrorRestricted
    -- | TODO
    | ErrorUniqueOpPrivilegesNeeded
    -- | TODO
    | ErrorNoOperHost
    -- | TODO
    | ErrorUModeUnknownFlag
    -- | TODO
    | ErrorUsersDontMatch
    deriving (Eq, Show)

data ReservedReplyCode
    -- | TODO
    = ReservedReplyServiceInfo
    -- | TODO
    | ReservedReplyEndOfServices
    -- | TODO
    | ReservedReplyService
    -- | TODO
    | ReservedReplyNone
    -- | TODO
    | ReservedReplyWhoIsChannelOp
    -- | TODO
    | ReservedReplyKillDone
    -- | TODO
    | ReservedReplyClosing
    -- | TODO
    | ReservedReplyCloseEnd
    -- | TODO
    | ReservedReplyInfoStart
    -- | TODO
    | ReservedReplyMyPortIs
    -- | TODO
    | ReservedReplyStatsCLine
    -- | TODO
    | ReservedReplyStatsNLine
    -- | TODO
    | ReservedReplyStatsILine
    -- | TODO
    | ReservedReplyStatsKLine
    -- | TODO
    | ReservedReplyStatsQLine
    -- | TODO
    | ReservedReplyStatsYLine
    -- | TODO
    | ReservedReplyStatsVLine
    -- | TODO
    | ReservedReplyStatsLLine
    -- | TODO
    | ReservedReplyStatsHLine
    -- | TODO
    | ReservedReplyStatsSLine
    -- | TODO
    | ReservedReplyStatsPing
    -- | TODO
    | ReservedReplyStatsBLine
    -- | TODO
    | ReservedReplyStatsDLine
    deriving (Eq, Show)

-- | TODO
data ReservedErrorCode
    -- | TODO
    = ReservedErrorNoServiceHost
    deriving (Eq, Show)