module Network.Skype.Protocol.User where

import Data.Typeable (Typeable)
import Network.Skype.Protocol.Types

data UserProperty = UserHandle UserID
                  | UserFullName UserFullName
                  | UserBirthday (Maybe UserBirthday)
                  | UserSex UserSex
                  | UserLanguage (Maybe (UserLanguageISOCode, UserLanguage))
                  | UserCountry (Maybe (UserCountryISOCode, UserCountry))
                  | UserProvince UserProvince
                  | UserCity UserCity
                  | UserHomePhone UserPhone
                  | UserOfficePhone UserPhone
                  | UserMobilePhone UserPhone
                  | UserHomepage UserHomepage
                  | UserAbout UserAbout
                  | UserHasCallEquipment Bool
                  | UserIsVideoCapable Bool
                  | UserIsVoicemailCapable Bool
                  | UserBuddyStatus UserBuddyStatus
                  | UserIsAuthorized Bool
                  | UserIsBlocked Bool
                  | UserOnlineStatus UserOnlineStatus
                  | UserLastOnlineTimestamp Timestamp
                  | UserCanLeaveVoicemail Bool
                  | UserSpeedDial UserSpeedDial
                  | UserReceiveAuthRequest UserAuthRequestMessage
                  | UserMoodText UserMoodText
                  | UserRichMoodText UserRichMoodText
                  | UserTimezone UserTimezoneOffset
                  | UserIsCallForwardingActive Bool
                  | UserNumberOfAuthedBuddies Int
                  | UserDisplayName UserDisplayName
  deriving (Eq, Show, Typeable)

data UserSex = UserSexUnknown
             | UserSexMale
             | UserSexFemale
  deriving (Eq, Show, Typeable)

data UserStatus = UserStatusUnknown       -- ^ no status information for current user.
                | UserStatusOnline        -- ^ current user is online.
                | UserStatusOffline       -- ^ current user is offline.
                | UserStatusSkypeMe       -- ^ current user is in "Skype Me" mode (Protocol 2).
                | UserStatusAway          -- ^ current user is away.
                | UserStatusNotAvailable  -- ^ current user is not available.
                | UserStatusDoNotDisturb  -- ^ current user is in "Do not disturb" mode.
                | UserStatusInvisible     -- ^ current user is invisible to others.
                | UserStatusLoggedOut     -- ^ current user is logged out. Clients are detached.
  deriving (Eq, Show, Typeable)

data UserBuddyStatus = UserBuddyStatusNeverBeen
                     | UserBuddyStatusDeleted
                     | UserBuddyStatusPending
                     | UserBuddyStatusAdded
  deriving (Eq, Show, Typeable)

data UserOnlineStatus = UserOnlineStatusUnknown
                      | UserOnlineStatusOffline
                      | UserOnlineStatusOnline
                      | UserOnlineStatusAway
                      | UserOnlineStatusNotAvailable
                      | UserOnlineStatusDoNotDisturb
  deriving (Eq, Show, Typeable)