{-# LANGUAGE DeriveDataTypeable, OverloadedStrings #-}
module Happstack.Auth.Core.AuthProfileURL where

import Control.Applicative ((<$>))
import Control.Monad       (msum)
import Data.Data           (Data, Typeable)
import Happstack.Auth.Core.AuthURL (AuthURL(..))
import Happstack.Auth.Core.ProfileURL (ProfileURL(..))
import Web.Routes          (PathInfo(..), segment)
import Test.QuickCheck     (Arbitrary(..), oneof)

data AuthProfileURL 
    = AuthURL AuthURL
    | ProfileURL ProfileURL
    deriving (Eq, Ord, Read, Show, Data, Typeable)

instance PathInfo AuthProfileURL where
    toPathSegments (AuthURL authURL)       = "auth"    : toPathSegments authURL
    toPathSegments (ProfileURL profileURL) = "profile" : toPathSegments profileURL
    fromPathSegments = 
        msum [ do segment "auth"
                  AuthURL <$> fromPathSegments
             , do segment "profile"
                  ProfileURL <$> fromPathSegments
             ]

instance Arbitrary AuthProfileURL where
    arbitrary = oneof [ AuthURL <$> arbitrary 
                      , ProfileURL <$> arbitrary
                      ]