{-# LANGUAGE OverloadedStrings #-}

{-|
Module      : Web.Lightning.Routes
Description : Defines route mappings to lightning-viz API endpoints.
Copyright   : (c) Connor Moreside, 2016
License     : BSD-3
Maintainer  : connor@moresi.de
Stability   : experimental
Portability : POSIX

Defines the Route mappings to the lightning-viz API.
-}

module Web.Lightning.Routes
  ( -- * API Endpoints
    plot
  , stream
  , publicLink
  )
  where

--------------------------------------------------------------------------------
import           Network.API.Builder               hiding (runRoute)

import           Web.Lightning.Types.Visualization (Visualization (..))
--------------------------------------------------------------------------------

-- | The main route that corresponds to the /visualizations endpoint. Using
-- this route, one can create and update plots.
plot :: Route
        -- ^ Returns a new route corresponding to /sessionId/visualizations.
plot = Route ["visualizations"]
             []
             "POST"

-- | This route is used in conjunction with streaming plot functions.
stream :: Visualization
          -- ^ Visualization to append
       -> Route
          -- ^ Returns the URL to update the visualization.
stream (Visualization i _ _) =
  Route ["visualizations", i, "data"]
        []
        "POST"

-- | Corresponds to the public URL of a visualization.
publicLink :: Visualization
              -- ^ The visualization to create the public link for.
           -> Route
              -- ^ Route representing public link for visualization.
publicLink (Visualization i _ _) =
  Route ["visualizations", i, "public"]
        []
        "GET"