{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, TemplateHaskell, TypeOperators, OverloadedStrings #-}
module Happstack.Authenticate.Password.PartialsURL where

import Data.Data                            (Data, Typeable)
import Control.Category                     ((.), id)
import GHC.Generics                         (Generic)
import Prelude                              hiding ((.), id)
import Text.Boomerang.TH                    (makeBoomerangs)
import Web.Routes                           (PathInfo(..))
import Web.Routes.Boomerang                 (Router, (:-), (<>), boomerangFromPathSegments, boomerangToPathSegments)


data PartialURL
  = LoginInline
  | Login
  | Logout
  | SignupPassword
  | ChangePassword
  | RequestResetPasswordForm
  | ResetPasswordForm
  deriving (Eq, Ord, Data, Typeable, Generic)

makeBoomerangs ''PartialURL

partialURL :: Router () (PartialURL :- ())
partialURL =
  (  "login-inline"         . rLoginInline
  <> "login"                . rLogin
  <> "logout"               . rLogout
  <> "signup-password"      . rSignupPassword
  <> "change-password"      . rChangePassword
  <> "reset-password-form"  . rResetPasswordForm
  <> "request-reset-password-form"  . rRequestResetPasswordForm
  )

instance PathInfo PartialURL where
  fromPathSegments = boomerangFromPathSegments partialURL
  toPathSegments   = boomerangToPathSegments   partialURL