module Network.Bugsnag.Device
  ( bugsnagDeviceFromUserAgent
  ) where

import Prelude

import Data.Bugsnag
import Data.ByteString (ByteString)
import Data.Text (pack, unpack)
import Data.Version
import Text.Read (readMaybe)
import Web.UAParser

bugsnagDeviceFromUserAgent :: ByteString -> Device
bugsnagDeviceFromUserAgent :: ByteString -> Device
bugsnagDeviceFromUserAgent ByteString
userAgent =
  Device
defaultDevice
    { device_osName = osrFamily <$> osResult
    , device_osVersion = do
        result <- osResult
        v1 <- readMaybe . unpack =<< osrV1 result
        v2 <- readMaybe . unpack =<< osrV2 result
        v3 <- readMaybe . unpack =<< osrV3 result
        v4 <- readMaybe . unpack =<< osrV4 result
        pure $ pack $ showVersion $ makeVersion [v1, v2, v3, v4]
    , device_browserName = uarFamily <$> uaResult
    , device_browserVersion = do
        result <- uaResult
        v1 <- readMaybe . unpack =<< uarV1 result
        v2 <- readMaybe . unpack =<< uarV2 result
        v3 <- readMaybe . unpack =<< uarV3 result
        pure $ pack $ showVersion $ makeVersion [v1, v2, v3]
    }
 where
  uaResult :: Maybe UAResult
uaResult = ByteString -> Maybe UAResult
parseUA ByteString
userAgent
  osResult :: Maybe OSResult
osResult = ByteString -> Maybe OSResult
parseOS ByteString
userAgent