{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell       #-}
{-# LANGUAGE TypeFamilies          #-}
{-# LANGUAGE TypeOperators         #-}
{-# LANGUAGE UndecidableInstances  #-}

-- |
-- Module      : Data.EBird.Client.Observations
-- Copyright   : (c) 2023 Finley McIlwaine
-- License     : MIT (see LICENSE)
--
-- Maintainer  : Finley McIlwaine <finleymcilwaine@gmail.com>
--
-- Types and functions for observation-related eBird API queries.

module Data.EBird.Client.Observations where

import Data.Default
import Data.Text
import Optics.TH
import Servant.Client

import Data.EBird.API
import Data.EBird.Client.Generated

-------------------------------------------------------------------------------
-- * Recent observations
-------------------------------------------------------------------------------

-- | Get a list of recent observations within a region. Results only include the
-- most recent observation for each species in the region.
--
-- For example, get up to 10 recent observations from the last 5 days in Park
-- County, Wyoming (using @-XOverloadedLabels@ and @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentObservations key
--     "US-WY-029"
--     (def & #maxResults ?~ 10 & #back ?~ 5)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#3d2a17c1-2129-475c-b4c8-7d362d6000cd).
recentObservations
  :: Text
  -- ^ eBird API key
  -> RegionCode
  -- ^ Region(s) to get observations from
  -> RecentObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentObservationsParams'/
  -> ClientM [Observation 'Simple]
recentObservations :: Text
-> RegionCode
-> RecentObservationsParams
-> ClientM [Observation 'Simple]
recentObservations Text
k RegionCode
r RecentObservationsParams{Maybe Bool
Maybe Integer
Maybe RegionCode
Maybe SPPLocale
Maybe TaxonomyCategories
_recentObservationsParamsBack :: Maybe Integer
_recentObservationsParamsCategories :: Maybe TaxonomyCategories
_recentObservationsParamsHotspot :: Maybe Bool
_recentObservationsParamsProvisional :: Maybe Bool
_recentObservationsParamsMaxResults :: Maybe Integer
_recentObservationsParamsExtraRegions :: Maybe RegionCode
_recentObservationsParamsLocale :: Maybe SPPLocale
_recentObservationsParamsBack :: RecentObservationsParams -> Maybe Integer
_recentObservationsParamsCategories :: RecentObservationsParams -> Maybe TaxonomyCategories
_recentObservationsParamsHotspot :: RecentObservationsParams -> Maybe Bool
_recentObservationsParamsProvisional :: RecentObservationsParams -> Maybe Bool
_recentObservationsParamsMaxResults :: RecentObservationsParams -> Maybe Integer
_recentObservationsParamsExtraRegions :: RecentObservationsParams -> Maybe RegionCode
_recentObservationsParamsLocale :: RecentObservationsParams -> Maybe SPPLocale
..} =
    Text
-> RegionCode
-> Maybe Integer
-> Maybe TaxonomyCategories
-> Maybe Bool
-> Maybe Bool
-> Maybe Integer
-> Maybe RegionCode
-> Maybe SPPLocale
-> ClientM [Observation 'Simple]
recentObservations_ Text
k RegionCode
r
      Maybe Integer
_recentObservationsParamsBack
      Maybe TaxonomyCategories
_recentObservationsParamsCategories
      Maybe Bool
_recentObservationsParamsHotspot
      Maybe Bool
_recentObservationsParamsProvisional
      Maybe Integer
_recentObservationsParamsMaxResults
      Maybe RegionCode
_recentObservationsParamsExtraRegions
      Maybe SPPLocale
_recentObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentObservationsAPI'.
--
-- Note that 'defaultRecentObservationsParams' (or the 'Default' instance's
-- 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentObservationsParamsBack' field to 30:
--
-- > def & recentObservationsParamsBack ?~ 30
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #back ?~ 30
data RecentObservationsParams =
    RecentObservationsParams
      { -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
        RecentObservationsParams -> Maybe Integer
_recentObservationsParamsBack :: Maybe Integer

        -- | Only include observations in these taxonomy categories
        --
        -- /default: all categories/
      , RecentObservationsParams -> Maybe TaxonomyCategories
_recentObservationsParamsCategories :: Maybe TaxonomyCategories

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentObservationsParams -> Maybe Bool
_recentObservationsParamsHotspot :: Maybe Bool

        -- | Include observations which have not been reviewed
        --
        -- /default: 'False'/
      , RecentObservationsParams -> Maybe Bool
_recentObservationsParamsProvisional :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentObservationsParams -> Maybe Integer
_recentObservationsParamsMaxResults :: Maybe Integer

        -- | Up to 10 extra regions to get observations from
        --
        -- /default: none/
      , RecentObservationsParams -> Maybe RegionCode
_recentObservationsParamsExtraRegions :: Maybe RegionCode

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentObservationsParams -> Maybe SPPLocale
_recentObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentObservationsParams -> ShowS
[RecentObservationsParams] -> ShowS
RecentObservationsParams -> String
(Int -> RecentObservationsParams -> ShowS)
-> (RecentObservationsParams -> String)
-> ([RecentObservationsParams] -> ShowS)
-> Show RecentObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentObservationsParams -> ShowS
showsPrec :: Int -> RecentObservationsParams -> ShowS
$cshow :: RecentObservationsParams -> String
show :: RecentObservationsParams -> String
$cshowList :: [RecentObservationsParams] -> ShowS
showList :: [RecentObservationsParams] -> ShowS
Show, ReadPrec [RecentObservationsParams]
ReadPrec RecentObservationsParams
Int -> ReadS RecentObservationsParams
ReadS [RecentObservationsParams]
(Int -> ReadS RecentObservationsParams)
-> ReadS [RecentObservationsParams]
-> ReadPrec RecentObservationsParams
-> ReadPrec [RecentObservationsParams]
-> Read RecentObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentObservationsParams
readsPrec :: Int -> ReadS RecentObservationsParams
$creadList :: ReadS [RecentObservationsParams]
readList :: ReadS [RecentObservationsParams]
$creadPrec :: ReadPrec RecentObservationsParams
readPrec :: ReadPrec RecentObservationsParams
$creadListPrec :: ReadPrec [RecentObservationsParams]
readListPrec :: ReadPrec [RecentObservationsParams]
Read, RecentObservationsParams -> RecentObservationsParams -> Bool
(RecentObservationsParams -> RecentObservationsParams -> Bool)
-> (RecentObservationsParams -> RecentObservationsParams -> Bool)
-> Eq RecentObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentObservationsParams -> RecentObservationsParams -> Bool
== :: RecentObservationsParams -> RecentObservationsParams -> Bool
$c/= :: RecentObservationsParams -> RecentObservationsParams -> Bool
/= :: RecentObservationsParams -> RecentObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentObservationsParams :: RecentObservationsParams
defaultRecentObservationsParams :: RecentObservationsParams
defaultRecentObservationsParams =
    RecentObservationsParams
      { _recentObservationsParamsBack :: Maybe Integer
_recentObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentObservationsParamsCategories :: Maybe TaxonomyCategories
_recentObservationsParamsCategories = Maybe TaxonomyCategories
forall a. Maybe a
Nothing
      , _recentObservationsParamsHotspot :: Maybe Bool
_recentObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentObservationsParamsProvisional :: Maybe Bool
_recentObservationsParamsProvisional = Maybe Bool
forall a. Maybe a
Nothing
      , _recentObservationsParamsMaxResults :: Maybe Integer
_recentObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentObservationsParamsExtraRegions :: Maybe RegionCode
_recentObservationsParamsExtraRegions = Maybe RegionCode
forall a. Maybe a
Nothing
      , _recentObservationsParamsLocale :: Maybe SPPLocale
_recentObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentObservationsParams where
  def :: RecentObservationsParams
def = RecentObservationsParams
defaultRecentObservationsParams

-- ** Optics for 'RecentObservationsParams'
makeLenses ''RecentObservationsParams
makeFieldLabels ''RecentObservationsParams

-------------------------------------------------------------------------------
-- * Recent notable observations
-------------------------------------------------------------------------------

-- | Get a list of recent notable observations within a region. Results only
-- include the most recent observation for each species in the region.
--
-- For example, get up to 10 recent notable observations from the last 30 days
-- in Park County, Wyoming (using @-XOverloadedLabels@ and
-- @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentNotableObservations key
--     "US-WY-029"
--     (def & #maxResults ?~ 10 & #back ?~ 30)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#397b9b8c-4ab9-4136-baae-3ffa4e5b26e4).
recentNotableObservations
  :: Text
  -- ^ eBird API key
  -> RegionCode
  -- ^ Region(s) to get observations from
  -> RecentNotableObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentNotableObservationsParams'/
  -> ClientM [SomeObservation]
recentNotableObservations :: Text
-> RegionCode
-> RecentNotableObservationsParams
-> ClientM [SomeObservation]
recentNotableObservations Text
k RegionCode
r RecentNotableObservationsParams{Maybe Bool
Maybe Integer
Maybe DetailLevel
Maybe RegionCode
Maybe SPPLocale
_recentNotableObservationsParamsBack :: Maybe Integer
_recentNotableObservationsParamsDetail :: Maybe DetailLevel
_recentNotableObservationsParamsHotspot :: Maybe Bool
_recentNotableObservationsParamsMaxResults :: Maybe Integer
_recentNotableObservationsParamsExtraRegions :: Maybe RegionCode
_recentNotableObservationsParamsLocale :: Maybe SPPLocale
_recentNotableObservationsParamsBack :: RecentNotableObservationsParams -> Maybe Integer
_recentNotableObservationsParamsDetail :: RecentNotableObservationsParams -> Maybe DetailLevel
_recentNotableObservationsParamsHotspot :: RecentNotableObservationsParams -> Maybe Bool
_recentNotableObservationsParamsMaxResults :: RecentNotableObservationsParams -> Maybe Integer
_recentNotableObservationsParamsExtraRegions :: RecentNotableObservationsParams -> Maybe RegionCode
_recentNotableObservationsParamsLocale :: RecentNotableObservationsParams -> Maybe SPPLocale
..} =
    Text
-> RegionCode
-> Maybe Integer
-> Maybe DetailLevel
-> Maybe Bool
-> Maybe Integer
-> Maybe RegionCode
-> Maybe SPPLocale
-> ClientM [SomeObservation]
recentNotableObservations_ Text
k RegionCode
r
      Maybe Integer
_recentNotableObservationsParamsBack
      Maybe DetailLevel
_recentNotableObservationsParamsDetail
      Maybe Bool
_recentNotableObservationsParamsHotspot
      Maybe Integer
_recentNotableObservationsParamsMaxResults
      Maybe RegionCode
_recentNotableObservationsParamsExtraRegions
      Maybe SPPLocale
_recentNotableObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentNotableObservationsAPI'.
--
-- Note that 'defaultRecentNotableObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentNotableObservationsParamsBack' field to 30:
--
-- > def & recentNotableObservationsParamsBack ?~ 30
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #back ?~ 30
data RecentNotableObservationsParams =
    RecentNotableObservationsParams
      { -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
        RecentNotableObservationsParams -> Maybe Integer
_recentNotableObservationsParamsBack :: Maybe Integer

        -- | Detail level for the resulting observations
        --
        -- /default: 'Simple'/
      , RecentNotableObservationsParams -> Maybe DetailLevel
_recentNotableObservationsParamsDetail :: Maybe DetailLevel

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentNotableObservationsParams -> Maybe Bool
_recentNotableObservationsParamsHotspot :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentNotableObservationsParams -> Maybe Integer
_recentNotableObservationsParamsMaxResults :: Maybe Integer

        -- | Up to 10 extra regions to get observations from
        --
        -- /default: none/
      , RecentNotableObservationsParams -> Maybe RegionCode
_recentNotableObservationsParamsExtraRegions :: Maybe RegionCode

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentNotableObservationsParams -> Maybe SPPLocale
_recentNotableObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentNotableObservationsParams -> ShowS
[RecentNotableObservationsParams] -> ShowS
RecentNotableObservationsParams -> String
(Int -> RecentNotableObservationsParams -> ShowS)
-> (RecentNotableObservationsParams -> String)
-> ([RecentNotableObservationsParams] -> ShowS)
-> Show RecentNotableObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentNotableObservationsParams -> ShowS
showsPrec :: Int -> RecentNotableObservationsParams -> ShowS
$cshow :: RecentNotableObservationsParams -> String
show :: RecentNotableObservationsParams -> String
$cshowList :: [RecentNotableObservationsParams] -> ShowS
showList :: [RecentNotableObservationsParams] -> ShowS
Show, ReadPrec [RecentNotableObservationsParams]
ReadPrec RecentNotableObservationsParams
Int -> ReadS RecentNotableObservationsParams
ReadS [RecentNotableObservationsParams]
(Int -> ReadS RecentNotableObservationsParams)
-> ReadS [RecentNotableObservationsParams]
-> ReadPrec RecentNotableObservationsParams
-> ReadPrec [RecentNotableObservationsParams]
-> Read RecentNotableObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentNotableObservationsParams
readsPrec :: Int -> ReadS RecentNotableObservationsParams
$creadList :: ReadS [RecentNotableObservationsParams]
readList :: ReadS [RecentNotableObservationsParams]
$creadPrec :: ReadPrec RecentNotableObservationsParams
readPrec :: ReadPrec RecentNotableObservationsParams
$creadListPrec :: ReadPrec [RecentNotableObservationsParams]
readListPrec :: ReadPrec [RecentNotableObservationsParams]
Read, RecentNotableObservationsParams
-> RecentNotableObservationsParams -> Bool
(RecentNotableObservationsParams
 -> RecentNotableObservationsParams -> Bool)
-> (RecentNotableObservationsParams
    -> RecentNotableObservationsParams -> Bool)
-> Eq RecentNotableObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentNotableObservationsParams
-> RecentNotableObservationsParams -> Bool
== :: RecentNotableObservationsParams
-> RecentNotableObservationsParams -> Bool
$c/= :: RecentNotableObservationsParams
-> RecentNotableObservationsParams -> Bool
/= :: RecentNotableObservationsParams
-> RecentNotableObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentNotableObservationsParams :: RecentNotableObservationsParams
defaultRecentNotableObservationsParams :: RecentNotableObservationsParams
defaultRecentNotableObservationsParams =
    RecentNotableObservationsParams
      { _recentNotableObservationsParamsBack :: Maybe Integer
_recentNotableObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNotableObservationsParamsDetail :: Maybe DetailLevel
_recentNotableObservationsParamsDetail = Maybe DetailLevel
forall a. Maybe a
Nothing
      , _recentNotableObservationsParamsHotspot :: Maybe Bool
_recentNotableObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNotableObservationsParamsMaxResults :: Maybe Integer
_recentNotableObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNotableObservationsParamsExtraRegions :: Maybe RegionCode
_recentNotableObservationsParamsExtraRegions = Maybe RegionCode
forall a. Maybe a
Nothing
      , _recentNotableObservationsParamsLocale :: Maybe SPPLocale
_recentNotableObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentNotableObservationsParams where
  def :: RecentNotableObservationsParams
def = RecentNotableObservationsParams
defaultRecentNotableObservationsParams

-- ** Optics for 'RecentNotableObservationsParams'
makeLenses ''RecentNotableObservationsParams
makeFieldLabels ''RecentNotableObservationsParams

-------------------------------------------------------------------------------
-- * Recent species observations
-------------------------------------------------------------------------------

-- | Get a list of recent observations of a specific species within a region.
--
-- For example, get observations of Peregrine Falcons from the last 30 days in
-- Park County, Wyoming (using @-XOverloadedLabels@ and @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentSpeciesObservations key
--     "US-WY-029"
--     "perfal"
--     (def & #back ?~ 30)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#755ce9ab-dc27-4cfc-953f-c69fb0f282d9).
recentSpeciesObservations
  :: Text
  -- ^ eBird API key
  -> RegionCode
  -- ^ Region(s) to get observations from
  -> SpeciesCode
  -- ^ Species to get observations of (e.g. "barswa" for Barn Swallow)
  -> RecentSpeciesObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentSpeciesObservationsParams'/
  -> ClientM [Observation 'Simple]
recentSpeciesObservations :: Text
-> RegionCode
-> SpeciesCode
-> RecentSpeciesObservationsParams
-> ClientM [Observation 'Simple]
recentSpeciesObservations Text
k RegionCode
r SpeciesCode
sp RecentSpeciesObservationsParams{Maybe Bool
Maybe Integer
Maybe RegionCode
Maybe SPPLocale
_recentSpeciesObservationsParamsBack :: Maybe Integer
_recentSpeciesObservationsParamsHotspot :: Maybe Bool
_recentSpeciesObservationsParamsProvisional :: Maybe Bool
_recentSpeciesObservationsParamsMaxResults :: Maybe Integer
_recentSpeciesObservationsParamsExtraRegions :: Maybe RegionCode
_recentSpeciesObservationsParamsLocale :: Maybe SPPLocale
_recentSpeciesObservationsParamsBack :: RecentSpeciesObservationsParams -> Maybe Integer
_recentSpeciesObservationsParamsHotspot :: RecentSpeciesObservationsParams -> Maybe Bool
_recentSpeciesObservationsParamsProvisional :: RecentSpeciesObservationsParams -> Maybe Bool
_recentSpeciesObservationsParamsMaxResults :: RecentSpeciesObservationsParams -> Maybe Integer
_recentSpeciesObservationsParamsExtraRegions :: RecentSpeciesObservationsParams -> Maybe RegionCode
_recentSpeciesObservationsParamsLocale :: RecentSpeciesObservationsParams -> Maybe SPPLocale
..} =
    Text
-> RegionCode
-> SpeciesCode
-> Maybe Integer
-> Maybe Bool
-> Maybe Bool
-> Maybe Integer
-> Maybe RegionCode
-> Maybe SPPLocale
-> ClientM [Observation 'Simple]
recentSpeciesObservations_ Text
k RegionCode
r SpeciesCode
sp
      Maybe Integer
_recentSpeciesObservationsParamsBack
      Maybe Bool
_recentSpeciesObservationsParamsHotspot
      Maybe Bool
_recentSpeciesObservationsParamsProvisional
      Maybe Integer
_recentSpeciesObservationsParamsMaxResults
      Maybe RegionCode
_recentSpeciesObservationsParamsExtraRegions
      Maybe SPPLocale
_recentSpeciesObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentSpeciesObservationsAPI'.
--
-- Note that 'defaultRecentSpeciesObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentSpeciesObservationsParamsBack' field to 30:
--
-- > def & recentSpeciesObservationsParamsBack ?~ 30
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #back ?~ 30
data RecentSpeciesObservationsParams =
    RecentSpeciesObservationsParams
      { -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
        RecentSpeciesObservationsParams -> Maybe Integer
_recentSpeciesObservationsParamsBack :: Maybe Integer

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentSpeciesObservationsParams -> Maybe Bool
_recentSpeciesObservationsParamsHotspot :: Maybe Bool

        -- | Include observations which have not been reviewed
        --
        -- /default: 'False'/
      , RecentSpeciesObservationsParams -> Maybe Bool
_recentSpeciesObservationsParamsProvisional :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentSpeciesObservationsParams -> Maybe Integer
_recentSpeciesObservationsParamsMaxResults :: Maybe Integer

        -- | Up to 10 extra regions to get observations from
        --
        -- /default: none/
      , RecentSpeciesObservationsParams -> Maybe RegionCode
_recentSpeciesObservationsParamsExtraRegions :: Maybe RegionCode

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentSpeciesObservationsParams -> Maybe SPPLocale
_recentSpeciesObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentSpeciesObservationsParams -> ShowS
[RecentSpeciesObservationsParams] -> ShowS
RecentSpeciesObservationsParams -> String
(Int -> RecentSpeciesObservationsParams -> ShowS)
-> (RecentSpeciesObservationsParams -> String)
-> ([RecentSpeciesObservationsParams] -> ShowS)
-> Show RecentSpeciesObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentSpeciesObservationsParams -> ShowS
showsPrec :: Int -> RecentSpeciesObservationsParams -> ShowS
$cshow :: RecentSpeciesObservationsParams -> String
show :: RecentSpeciesObservationsParams -> String
$cshowList :: [RecentSpeciesObservationsParams] -> ShowS
showList :: [RecentSpeciesObservationsParams] -> ShowS
Show, ReadPrec [RecentSpeciesObservationsParams]
ReadPrec RecentSpeciesObservationsParams
Int -> ReadS RecentSpeciesObservationsParams
ReadS [RecentSpeciesObservationsParams]
(Int -> ReadS RecentSpeciesObservationsParams)
-> ReadS [RecentSpeciesObservationsParams]
-> ReadPrec RecentSpeciesObservationsParams
-> ReadPrec [RecentSpeciesObservationsParams]
-> Read RecentSpeciesObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentSpeciesObservationsParams
readsPrec :: Int -> ReadS RecentSpeciesObservationsParams
$creadList :: ReadS [RecentSpeciesObservationsParams]
readList :: ReadS [RecentSpeciesObservationsParams]
$creadPrec :: ReadPrec RecentSpeciesObservationsParams
readPrec :: ReadPrec RecentSpeciesObservationsParams
$creadListPrec :: ReadPrec [RecentSpeciesObservationsParams]
readListPrec :: ReadPrec [RecentSpeciesObservationsParams]
Read, RecentSpeciesObservationsParams
-> RecentSpeciesObservationsParams -> Bool
(RecentSpeciesObservationsParams
 -> RecentSpeciesObservationsParams -> Bool)
-> (RecentSpeciesObservationsParams
    -> RecentSpeciesObservationsParams -> Bool)
-> Eq RecentSpeciesObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentSpeciesObservationsParams
-> RecentSpeciesObservationsParams -> Bool
== :: RecentSpeciesObservationsParams
-> RecentSpeciesObservationsParams -> Bool
$c/= :: RecentSpeciesObservationsParams
-> RecentSpeciesObservationsParams -> Bool
/= :: RecentSpeciesObservationsParams
-> RecentSpeciesObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentSpeciesObservationsParams :: RecentSpeciesObservationsParams
defaultRecentSpeciesObservationsParams :: RecentSpeciesObservationsParams
defaultRecentSpeciesObservationsParams =
    RecentSpeciesObservationsParams
      { _recentSpeciesObservationsParamsBack :: Maybe Integer
_recentSpeciesObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentSpeciesObservationsParamsHotspot :: Maybe Bool
_recentSpeciesObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentSpeciesObservationsParamsProvisional :: Maybe Bool
_recentSpeciesObservationsParamsProvisional = Maybe Bool
forall a. Maybe a
Nothing
      , _recentSpeciesObservationsParamsMaxResults :: Maybe Integer
_recentSpeciesObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentSpeciesObservationsParamsExtraRegions :: Maybe RegionCode
_recentSpeciesObservationsParamsExtraRegions = Maybe RegionCode
forall a. Maybe a
Nothing
      , _recentSpeciesObservationsParamsLocale :: Maybe SPPLocale
_recentSpeciesObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentSpeciesObservationsParams where
  def :: RecentSpeciesObservationsParams
def = RecentSpeciesObservationsParams
defaultRecentSpeciesObservationsParams

-- ** Optics for 'RecentSpeciesObservationsParams'
makeLenses ''RecentSpeciesObservationsParams
makeFieldLabels ''RecentSpeciesObservationsParams

-------------------------------------------------------------------------------
-- * Recent nearby observations
-------------------------------------------------------------------------------

-- | Get a list of recent observations within some radius of some
-- latitude/longitude.
--
-- For example, get up to 5 nearby observations within 10km of Cody, Wyoming
-- (using @-XOverloadedLabels@ and @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentNearbyObservations key
--     44.526340 (-109.056534)
--     (def & #maxResults ?~ 5 & #radius ?~ 10)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#397b9b8c-4ab9-4136-baae-3ffa4e5b26e4).
recentNearbyObservations
  :: Text
  -- ^ eBird API key
  -> Double
  -- ^ Latitude of the location to get observations near
  -> Double
  -- ^ Longitude of the location to get observations near
  -> RecentNearbyObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentNearbyObservationsParams'/
  -> ClientM [Observation 'Simple]
recentNearbyObservations :: Text
-> Double
-> Double
-> RecentNearbyObservationsParams
-> ClientM [Observation 'Simple]
recentNearbyObservations Text
k Double
lat Double
lng RecentNearbyObservationsParams{Maybe Bool
Maybe Integer
Maybe SortObservationsBy
Maybe SPPLocale
Maybe TaxonomyCategories
_recentNearbyObservationsParamsRadius :: Maybe Integer
_recentNearbyObservationsParamsBack :: Maybe Integer
_recentNearbyObservationsParamsCategories :: Maybe TaxonomyCategories
_recentNearbyObservationsParamsHotspot :: Maybe Bool
_recentNearbyObservationsParamsProvisional :: Maybe Bool
_recentNearbyObservationsParamsMaxResults :: Maybe Integer
_recentNearbyObservationsParamsSortBy :: Maybe SortObservationsBy
_recentNearbyObservationsParamsLocale :: Maybe SPPLocale
_recentNearbyObservationsParamsRadius :: RecentNearbyObservationsParams -> Maybe Integer
_recentNearbyObservationsParamsBack :: RecentNearbyObservationsParams -> Maybe Integer
_recentNearbyObservationsParamsCategories :: RecentNearbyObservationsParams -> Maybe TaxonomyCategories
_recentNearbyObservationsParamsHotspot :: RecentNearbyObservationsParams -> Maybe Bool
_recentNearbyObservationsParamsProvisional :: RecentNearbyObservationsParams -> Maybe Bool
_recentNearbyObservationsParamsMaxResults :: RecentNearbyObservationsParams -> Maybe Integer
_recentNearbyObservationsParamsSortBy :: RecentNearbyObservationsParams -> Maybe SortObservationsBy
_recentNearbyObservationsParamsLocale :: RecentNearbyObservationsParams -> Maybe SPPLocale
..} =
    Text
-> Double
-> Double
-> Maybe Integer
-> Maybe Integer
-> Maybe TaxonomyCategories
-> Maybe Bool
-> Maybe Bool
-> Maybe Integer
-> Maybe SortObservationsBy
-> Maybe SPPLocale
-> ClientM [Observation 'Simple]
recentNearbyObservations_ Text
k Double
lat Double
lng
      Maybe Integer
_recentNearbyObservationsParamsRadius
      Maybe Integer
_recentNearbyObservationsParamsBack
      Maybe TaxonomyCategories
_recentNearbyObservationsParamsCategories
      Maybe Bool
_recentNearbyObservationsParamsHotspot
      Maybe Bool
_recentNearbyObservationsParamsProvisional
      Maybe Integer
_recentNearbyObservationsParamsMaxResults
      Maybe SortObservationsBy
_recentNearbyObservationsParamsSortBy
      Maybe SPPLocale
_recentNearbyObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentNearbyObservationsAPI'.
--
-- Note that 'defaultRecentNearbyObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentNearbyObservationsParamsRadius' field to 10km:
--
-- > def & recentNearbyObservationsParamsRadius ?~ 10
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #radius ?~ 10
data RecentNearbyObservationsParams =
    RecentNearbyObservationsParams
      { -- | Search radius from the given latitude/longitude in kilometers
        --
        -- /0 - 50, default: 25/
        RecentNearbyObservationsParams -> Maybe Integer
_recentNearbyObservationsParamsRadius :: Maybe Integer

        -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
      , RecentNearbyObservationsParams -> Maybe Integer
_recentNearbyObservationsParamsBack :: Maybe Integer

        -- | Only include observations in these taxonomy categories
        --
        -- /default: all/
      , RecentNearbyObservationsParams -> Maybe TaxonomyCategories
_recentNearbyObservationsParamsCategories :: Maybe TaxonomyCategories

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentNearbyObservationsParams -> Maybe Bool
_recentNearbyObservationsParamsHotspot :: Maybe Bool

        -- | Include observations which have not been reviewed
        --
        -- /default: 'False'/
      , RecentNearbyObservationsParams -> Maybe Bool
_recentNearbyObservationsParamsProvisional :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentNearbyObservationsParams -> Maybe Integer
_recentNearbyObservationsParamsMaxResults :: Maybe Integer

        -- | Sort observations by taxonomy ('SortObservationsBySpecies') or by
        -- date ('SortObservationsByDate', most recent first)
        --
        -- /default: 'SortObservationsByDate'/
      , RecentNearbyObservationsParams -> Maybe SortObservationsBy
_recentNearbyObservationsParamsSortBy :: Maybe SortObservationsBy

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentNearbyObservationsParams -> Maybe SPPLocale
_recentNearbyObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentNearbyObservationsParams -> ShowS
[RecentNearbyObservationsParams] -> ShowS
RecentNearbyObservationsParams -> String
(Int -> RecentNearbyObservationsParams -> ShowS)
-> (RecentNearbyObservationsParams -> String)
-> ([RecentNearbyObservationsParams] -> ShowS)
-> Show RecentNearbyObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentNearbyObservationsParams -> ShowS
showsPrec :: Int -> RecentNearbyObservationsParams -> ShowS
$cshow :: RecentNearbyObservationsParams -> String
show :: RecentNearbyObservationsParams -> String
$cshowList :: [RecentNearbyObservationsParams] -> ShowS
showList :: [RecentNearbyObservationsParams] -> ShowS
Show, ReadPrec [RecentNearbyObservationsParams]
ReadPrec RecentNearbyObservationsParams
Int -> ReadS RecentNearbyObservationsParams
ReadS [RecentNearbyObservationsParams]
(Int -> ReadS RecentNearbyObservationsParams)
-> ReadS [RecentNearbyObservationsParams]
-> ReadPrec RecentNearbyObservationsParams
-> ReadPrec [RecentNearbyObservationsParams]
-> Read RecentNearbyObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentNearbyObservationsParams
readsPrec :: Int -> ReadS RecentNearbyObservationsParams
$creadList :: ReadS [RecentNearbyObservationsParams]
readList :: ReadS [RecentNearbyObservationsParams]
$creadPrec :: ReadPrec RecentNearbyObservationsParams
readPrec :: ReadPrec RecentNearbyObservationsParams
$creadListPrec :: ReadPrec [RecentNearbyObservationsParams]
readListPrec :: ReadPrec [RecentNearbyObservationsParams]
Read, RecentNearbyObservationsParams
-> RecentNearbyObservationsParams -> Bool
(RecentNearbyObservationsParams
 -> RecentNearbyObservationsParams -> Bool)
-> (RecentNearbyObservationsParams
    -> RecentNearbyObservationsParams -> Bool)
-> Eq RecentNearbyObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentNearbyObservationsParams
-> RecentNearbyObservationsParams -> Bool
== :: RecentNearbyObservationsParams
-> RecentNearbyObservationsParams -> Bool
$c/= :: RecentNearbyObservationsParams
-> RecentNearbyObservationsParams -> Bool
/= :: RecentNearbyObservationsParams
-> RecentNearbyObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentNearbyObservationsParams :: RecentNearbyObservationsParams
defaultRecentNearbyObservationsParams :: RecentNearbyObservationsParams
defaultRecentNearbyObservationsParams =
    RecentNearbyObservationsParams
      { _recentNearbyObservationsParamsRadius :: Maybe Integer
_recentNearbyObservationsParamsRadius = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsBack :: Maybe Integer
_recentNearbyObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsCategories :: Maybe TaxonomyCategories
_recentNearbyObservationsParamsCategories = Maybe TaxonomyCategories
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsHotspot :: Maybe Bool
_recentNearbyObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsProvisional :: Maybe Bool
_recentNearbyObservationsParamsProvisional = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsMaxResults :: Maybe Integer
_recentNearbyObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsSortBy :: Maybe SortObservationsBy
_recentNearbyObservationsParamsSortBy = Maybe SortObservationsBy
forall a. Maybe a
Nothing
      , _recentNearbyObservationsParamsLocale :: Maybe SPPLocale
_recentNearbyObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentNearbyObservationsParams where
  def :: RecentNearbyObservationsParams
def = RecentNearbyObservationsParams
defaultRecentNearbyObservationsParams

-- ** Optics for 'RecentNearbyObservationsParams'
makeLenses ''RecentNearbyObservationsParams
makeFieldLabels ''RecentNearbyObservationsParams

-------------------------------------------------------------------------------
-- * Recent nearby species observations
-------------------------------------------------------------------------------

-- | Get a list of recent observations of a species within some radius of some
-- latitude/longitude.
--
-- For example, get up to 5 nearby observations of Peregrine Falcons within 50km
-- of Cody, Wyoming (using @-XOverloadedLabels@ and @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentNearbySpeciesObservations key
--     "perfal"
--     44.526340 (-109.056534)
--     (def & #radius ?~ 50 & #maxResults ?~ 5)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#20fb2c3b-ee7f-49ae-a912-9c3f16a40397).
recentNearbySpeciesObservations
  :: Text
  -- ^ eBird API key
  -> SpeciesCode
  -- ^ Species to get observations of (e.g. "bohwax" for Bohemian Waxwing)
  -> Double
  -- ^ Latitude of the location to get observations near
  -> Double
  -- ^ Longitude of the location to get observations near
  -> RecentNearbySpeciesObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentNearbySpeciesObservationsParams'/
  -> ClientM [Observation 'Simple]
recentNearbySpeciesObservations :: Text
-> SpeciesCode
-> Double
-> Double
-> RecentNearbySpeciesObservationsParams
-> ClientM [Observation 'Simple]
recentNearbySpeciesObservations Text
k SpeciesCode
sp Double
lat Double
lng RecentNearbySpeciesObservationsParams{Maybe Bool
Maybe Integer
Maybe SortObservationsBy
Maybe SPPLocale
Maybe TaxonomyCategories
_recentNearbySpeciesObservationsParamsRadius :: Maybe Integer
_recentNearbySpeciesObservationsParamsBack :: Maybe Integer
_recentNearbySpeciesObservationsParamsCategories :: Maybe TaxonomyCategories
_recentNearbySpeciesObservationsParamsHotspot :: Maybe Bool
_recentNearbySpeciesObservationsParamsProvisional :: Maybe Bool
_recentNearbySpeciesObservationsParamsMaxResults :: Maybe Integer
_recentNearbySpeciesObservationsParamsSortBy :: Maybe SortObservationsBy
_recentNearbySpeciesObservationsParamsLocale :: Maybe SPPLocale
_recentNearbySpeciesObservationsParamsRadius :: RecentNearbySpeciesObservationsParams -> Maybe Integer
_recentNearbySpeciesObservationsParamsBack :: RecentNearbySpeciesObservationsParams -> Maybe Integer
_recentNearbySpeciesObservationsParamsCategories :: RecentNearbySpeciesObservationsParams -> Maybe TaxonomyCategories
_recentNearbySpeciesObservationsParamsHotspot :: RecentNearbySpeciesObservationsParams -> Maybe Bool
_recentNearbySpeciesObservationsParamsProvisional :: RecentNearbySpeciesObservationsParams -> Maybe Bool
_recentNearbySpeciesObservationsParamsMaxResults :: RecentNearbySpeciesObservationsParams -> Maybe Integer
_recentNearbySpeciesObservationsParamsSortBy :: RecentNearbySpeciesObservationsParams -> Maybe SortObservationsBy
_recentNearbySpeciesObservationsParamsLocale :: RecentNearbySpeciesObservationsParams -> Maybe SPPLocale
..} =
    Text
-> SpeciesCode
-> Double
-> Double
-> Maybe Integer
-> Maybe Integer
-> Maybe TaxonomyCategories
-> Maybe Bool
-> Maybe Bool
-> Maybe Integer
-> Maybe SortObservationsBy
-> Maybe SPPLocale
-> ClientM [Observation 'Simple]
recentNearbySpeciesObservations_ Text
k SpeciesCode
sp Double
lat Double
lng
      Maybe Integer
_recentNearbySpeciesObservationsParamsRadius
      Maybe Integer
_recentNearbySpeciesObservationsParamsBack
      Maybe TaxonomyCategories
_recentNearbySpeciesObservationsParamsCategories
      Maybe Bool
_recentNearbySpeciesObservationsParamsHotspot
      Maybe Bool
_recentNearbySpeciesObservationsParamsProvisional
      Maybe Integer
_recentNearbySpeciesObservationsParamsMaxResults
      Maybe SortObservationsBy
_recentNearbySpeciesObservationsParamsSortBy
      Maybe SPPLocale
_recentNearbySpeciesObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentNearbySpeciesObservationsAPI'.
--
-- Note that 'defaultRecentNearbySpeciesObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentNearbySpeciesObservationsParamsRadius' field to 10km:
--
-- > def & recentNearbySpeciesObservationsParamsRadius ?~ 10
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #radius ?~ 10
data RecentNearbySpeciesObservationsParams =
    RecentNearbySpeciesObservationsParams
      { -- | Search radius from the given latitude/longitude in kilometers
        --
        -- /0 - 50, default: 25/
        RecentNearbySpeciesObservationsParams -> Maybe Integer
_recentNearbySpeciesObservationsParamsRadius :: Maybe Integer

        -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
      , RecentNearbySpeciesObservationsParams -> Maybe Integer
_recentNearbySpeciesObservationsParamsBack :: Maybe Integer

        -- | Only include observations in these taxonomy categories
        --
        -- /default: all/
      , RecentNearbySpeciesObservationsParams -> Maybe TaxonomyCategories
_recentNearbySpeciesObservationsParamsCategories :: Maybe TaxonomyCategories

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentNearbySpeciesObservationsParams -> Maybe Bool
_recentNearbySpeciesObservationsParamsHotspot :: Maybe Bool

        -- | Include observations which have not been reviewed
        --
        -- /default: 'False'/
      , RecentNearbySpeciesObservationsParams -> Maybe Bool
_recentNearbySpeciesObservationsParamsProvisional :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentNearbySpeciesObservationsParams -> Maybe Integer
_recentNearbySpeciesObservationsParamsMaxResults :: Maybe Integer

        -- | Sort observations by taxonomy ('SortObservationsBySpecies') or by
        -- date ('SortObservationsByDate', most recent first)
        --
        -- /default: 'SortObservationsByDate'/
      , RecentNearbySpeciesObservationsParams -> Maybe SortObservationsBy
_recentNearbySpeciesObservationsParamsSortBy :: Maybe SortObservationsBy

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentNearbySpeciesObservationsParams -> Maybe SPPLocale
_recentNearbySpeciesObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentNearbySpeciesObservationsParams -> ShowS
[RecentNearbySpeciesObservationsParams] -> ShowS
RecentNearbySpeciesObservationsParams -> String
(Int -> RecentNearbySpeciesObservationsParams -> ShowS)
-> (RecentNearbySpeciesObservationsParams -> String)
-> ([RecentNearbySpeciesObservationsParams] -> ShowS)
-> Show RecentNearbySpeciesObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentNearbySpeciesObservationsParams -> ShowS
showsPrec :: Int -> RecentNearbySpeciesObservationsParams -> ShowS
$cshow :: RecentNearbySpeciesObservationsParams -> String
show :: RecentNearbySpeciesObservationsParams -> String
$cshowList :: [RecentNearbySpeciesObservationsParams] -> ShowS
showList :: [RecentNearbySpeciesObservationsParams] -> ShowS
Show, ReadPrec [RecentNearbySpeciesObservationsParams]
ReadPrec RecentNearbySpeciesObservationsParams
Int -> ReadS RecentNearbySpeciesObservationsParams
ReadS [RecentNearbySpeciesObservationsParams]
(Int -> ReadS RecentNearbySpeciesObservationsParams)
-> ReadS [RecentNearbySpeciesObservationsParams]
-> ReadPrec RecentNearbySpeciesObservationsParams
-> ReadPrec [RecentNearbySpeciesObservationsParams]
-> Read RecentNearbySpeciesObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentNearbySpeciesObservationsParams
readsPrec :: Int -> ReadS RecentNearbySpeciesObservationsParams
$creadList :: ReadS [RecentNearbySpeciesObservationsParams]
readList :: ReadS [RecentNearbySpeciesObservationsParams]
$creadPrec :: ReadPrec RecentNearbySpeciesObservationsParams
readPrec :: ReadPrec RecentNearbySpeciesObservationsParams
$creadListPrec :: ReadPrec [RecentNearbySpeciesObservationsParams]
readListPrec :: ReadPrec [RecentNearbySpeciesObservationsParams]
Read, RecentNearbySpeciesObservationsParams
-> RecentNearbySpeciesObservationsParams -> Bool
(RecentNearbySpeciesObservationsParams
 -> RecentNearbySpeciesObservationsParams -> Bool)
-> (RecentNearbySpeciesObservationsParams
    -> RecentNearbySpeciesObservationsParams -> Bool)
-> Eq RecentNearbySpeciesObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentNearbySpeciesObservationsParams
-> RecentNearbySpeciesObservationsParams -> Bool
== :: RecentNearbySpeciesObservationsParams
-> RecentNearbySpeciesObservationsParams -> Bool
$c/= :: RecentNearbySpeciesObservationsParams
-> RecentNearbySpeciesObservationsParams -> Bool
/= :: RecentNearbySpeciesObservationsParams
-> RecentNearbySpeciesObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentNearbySpeciesObservationsParams :: RecentNearbySpeciesObservationsParams
defaultRecentNearbySpeciesObservationsParams :: RecentNearbySpeciesObservationsParams
defaultRecentNearbySpeciesObservationsParams =
    RecentNearbySpeciesObservationsParams
      { _recentNearbySpeciesObservationsParamsRadius :: Maybe Integer
_recentNearbySpeciesObservationsParamsRadius = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsBack :: Maybe Integer
_recentNearbySpeciesObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsCategories :: Maybe TaxonomyCategories
_recentNearbySpeciesObservationsParamsCategories = Maybe TaxonomyCategories
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsHotspot :: Maybe Bool
_recentNearbySpeciesObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsProvisional :: Maybe Bool
_recentNearbySpeciesObservationsParamsProvisional = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsMaxResults :: Maybe Integer
_recentNearbySpeciesObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsSortBy :: Maybe SortObservationsBy
_recentNearbySpeciesObservationsParamsSortBy = Maybe SortObservationsBy
forall a. Maybe a
Nothing
      , _recentNearbySpeciesObservationsParamsLocale :: Maybe SPPLocale
_recentNearbySpeciesObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentNearbySpeciesObservationsParams where
  def :: RecentNearbySpeciesObservationsParams
def = RecentNearbySpeciesObservationsParams
defaultRecentNearbySpeciesObservationsParams

-- ** Optics for 'RecentNearbySpeciesObservationsParams'
makeLenses ''RecentNearbySpeciesObservationsParams
makeFieldLabels ''RecentNearbySpeciesObservationsParams

-------------------------------------------------------------------------------
-- * Recent nearest species observations
-------------------------------------------------------------------------------

-- | Get a list of recent observations of some species nearest to some
-- latitude/longitude.
--
-- For example, get the 5 nearest observations of Black-throated Gray Warblers
-- within 50km of Capitol Reef National Park (using @-XOverloadedLabels@ and
-- @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentNearestSpeciesObservations key
--     "btywar"
--     38.366970 (-111.261504)
--     (def & #radius ?~ 50 & #maxResults ?~ 5)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#6bded97f-9997-477f-ab2f-94f254954ccb).
recentNearestSpeciesObservations
  :: Text
  -- ^ eBird API key
  -> SpeciesCode
  -- ^ Species to get observations of (e.g. "bohwax" for Bohemian Waxwing)
  -> Double
  -- ^ Latitude of the location to get observations near
  -> Double
  -- ^ Longitude of the location to get observations near
  -> RecentNearestSpeciesObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentNearestSpeciesObservationsParams'/
  -> ClientM [Observation 'Simple]
recentNearestSpeciesObservations :: Text
-> SpeciesCode
-> Double
-> Double
-> RecentNearestSpeciesObservationsParams
-> ClientM [Observation 'Simple]
recentNearestSpeciesObservations Text
k SpeciesCode
sp Double
lat Double
lng RecentNearestSpeciesObservationsParams{Maybe Bool
Maybe Integer
Maybe SPPLocale
_recentNearestSpeciesObservationsParamsRadius :: Maybe Integer
_recentNearestSpeciesObservationsParamsBack :: Maybe Integer
_recentNearestSpeciesObservationsParamsHotspot :: Maybe Bool
_recentNearestSpeciesObservationsParamsProvisional :: Maybe Bool
_recentNearestSpeciesObservationsParamsMaxResults :: Maybe Integer
_recentNearestSpeciesObservationsParamsLocale :: Maybe SPPLocale
_recentNearestSpeciesObservationsParamsRadius :: RecentNearestSpeciesObservationsParams -> Maybe Integer
_recentNearestSpeciesObservationsParamsBack :: RecentNearestSpeciesObservationsParams -> Maybe Integer
_recentNearestSpeciesObservationsParamsHotspot :: RecentNearestSpeciesObservationsParams -> Maybe Bool
_recentNearestSpeciesObservationsParamsProvisional :: RecentNearestSpeciesObservationsParams -> Maybe Bool
_recentNearestSpeciesObservationsParamsMaxResults :: RecentNearestSpeciesObservationsParams -> Maybe Integer
_recentNearestSpeciesObservationsParamsLocale :: RecentNearestSpeciesObservationsParams -> Maybe SPPLocale
..} =
    Text
-> SpeciesCode
-> Double
-> Double
-> Maybe Integer
-> Maybe Integer
-> Maybe Bool
-> Maybe Bool
-> Maybe Integer
-> Maybe SPPLocale
-> ClientM [Observation 'Simple]
recentNearestSpeciesObservations_ Text
k SpeciesCode
sp Double
lat Double
lng
      Maybe Integer
_recentNearestSpeciesObservationsParamsRadius
      Maybe Integer
_recentNearestSpeciesObservationsParamsBack
      Maybe Bool
_recentNearestSpeciesObservationsParamsHotspot
      Maybe Bool
_recentNearestSpeciesObservationsParamsProvisional
      Maybe Integer
_recentNearestSpeciesObservationsParamsMaxResults
      Maybe SPPLocale
_recentNearestSpeciesObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentNearestSpeciesObservationsAPI'.
--
-- Note that 'defaultRecentNearestSpeciesObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentNearestSpeciesObservationsParamsRadius' field to 10km:
--
-- > def & recentNearestSpeciesObservationsParamsRadius ?~ 10
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #radius ?~ 10
data RecentNearestSpeciesObservationsParams =
    RecentNearestSpeciesObservationsParams
      { -- | Search radius from the given latitude/longitude in kilometers
        --
        -- /0 - 50, default: 25/
        RecentNearestSpeciesObservationsParams -> Maybe Integer
_recentNearestSpeciesObservationsParamsRadius :: Maybe Integer

        -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
      , RecentNearestSpeciesObservationsParams -> Maybe Integer
_recentNearestSpeciesObservationsParamsBack :: Maybe Integer

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentNearestSpeciesObservationsParams -> Maybe Bool
_recentNearestSpeciesObservationsParamsHotspot :: Maybe Bool

        -- | Include observations which have not been reviewed
        --
        -- /default: 'False'/
      , RecentNearestSpeciesObservationsParams -> Maybe Bool
_recentNearestSpeciesObservationsParamsProvisional :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentNearestSpeciesObservationsParams -> Maybe Integer
_recentNearestSpeciesObservationsParamsMaxResults :: Maybe Integer

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentNearestSpeciesObservationsParams -> Maybe SPPLocale
_recentNearestSpeciesObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentNearestSpeciesObservationsParams -> ShowS
[RecentNearestSpeciesObservationsParams] -> ShowS
RecentNearestSpeciesObservationsParams -> String
(Int -> RecentNearestSpeciesObservationsParams -> ShowS)
-> (RecentNearestSpeciesObservationsParams -> String)
-> ([RecentNearestSpeciesObservationsParams] -> ShowS)
-> Show RecentNearestSpeciesObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentNearestSpeciesObservationsParams -> ShowS
showsPrec :: Int -> RecentNearestSpeciesObservationsParams -> ShowS
$cshow :: RecentNearestSpeciesObservationsParams -> String
show :: RecentNearestSpeciesObservationsParams -> String
$cshowList :: [RecentNearestSpeciesObservationsParams] -> ShowS
showList :: [RecentNearestSpeciesObservationsParams] -> ShowS
Show, ReadPrec [RecentNearestSpeciesObservationsParams]
ReadPrec RecentNearestSpeciesObservationsParams
Int -> ReadS RecentNearestSpeciesObservationsParams
ReadS [RecentNearestSpeciesObservationsParams]
(Int -> ReadS RecentNearestSpeciesObservationsParams)
-> ReadS [RecentNearestSpeciesObservationsParams]
-> ReadPrec RecentNearestSpeciesObservationsParams
-> ReadPrec [RecentNearestSpeciesObservationsParams]
-> Read RecentNearestSpeciesObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentNearestSpeciesObservationsParams
readsPrec :: Int -> ReadS RecentNearestSpeciesObservationsParams
$creadList :: ReadS [RecentNearestSpeciesObservationsParams]
readList :: ReadS [RecentNearestSpeciesObservationsParams]
$creadPrec :: ReadPrec RecentNearestSpeciesObservationsParams
readPrec :: ReadPrec RecentNearestSpeciesObservationsParams
$creadListPrec :: ReadPrec [RecentNearestSpeciesObservationsParams]
readListPrec :: ReadPrec [RecentNearestSpeciesObservationsParams]
Read, RecentNearestSpeciesObservationsParams
-> RecentNearestSpeciesObservationsParams -> Bool
(RecentNearestSpeciesObservationsParams
 -> RecentNearestSpeciesObservationsParams -> Bool)
-> (RecentNearestSpeciesObservationsParams
    -> RecentNearestSpeciesObservationsParams -> Bool)
-> Eq RecentNearestSpeciesObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentNearestSpeciesObservationsParams
-> RecentNearestSpeciesObservationsParams -> Bool
== :: RecentNearestSpeciesObservationsParams
-> RecentNearestSpeciesObservationsParams -> Bool
$c/= :: RecentNearestSpeciesObservationsParams
-> RecentNearestSpeciesObservationsParams -> Bool
/= :: RecentNearestSpeciesObservationsParams
-> RecentNearestSpeciesObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentNearestSpeciesObservationsParams :: RecentNearestSpeciesObservationsParams
defaultRecentNearestSpeciesObservationsParams :: RecentNearestSpeciesObservationsParams
defaultRecentNearestSpeciesObservationsParams =
    RecentNearestSpeciesObservationsParams
      { _recentNearestSpeciesObservationsParamsRadius :: Maybe Integer
_recentNearestSpeciesObservationsParamsRadius = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearestSpeciesObservationsParamsBack :: Maybe Integer
_recentNearestSpeciesObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearestSpeciesObservationsParamsHotspot :: Maybe Bool
_recentNearestSpeciesObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearestSpeciesObservationsParamsProvisional :: Maybe Bool
_recentNearestSpeciesObservationsParamsProvisional = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearestSpeciesObservationsParamsMaxResults :: Maybe Integer
_recentNearestSpeciesObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearestSpeciesObservationsParamsLocale :: Maybe SPPLocale
_recentNearestSpeciesObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentNearestSpeciesObservationsParams where
  def :: RecentNearestSpeciesObservationsParams
def = RecentNearestSpeciesObservationsParams
defaultRecentNearestSpeciesObservationsParams

-- ** Optics for 'RecentNearestSpeciesObservationsParams'
makeLenses ''RecentNearestSpeciesObservationsParams
makeFieldLabels ''RecentNearestSpeciesObservationsParams

-------------------------------------------------------------------------------
-- * Recent nearby notable observations
-------------------------------------------------------------------------------

-- | Get a list of recent /notable/ observations of some near some
-- latitude/longitude.
--
-- For example, get 5 notable observations within 25km of Capitol Reef National
-- Park (using @-XOverloadedLabels@ and @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   recentNearbyNotableObservations key
--     38.366970 (-111.261504)
--     (def & #radius ?~ 25 & #maxResults ?~ 5)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#caa348bb-71f6-471c-b203-9e1643377cbc).
recentNearbyNotableObservations
  :: Text
  -- ^ eBird API key
  -> Double
  -- ^ Latitude of the location to get observations near
  -> Double
  -- ^ Longitude of the location to get observations near
  -> RecentNearbyNotableObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultRecentNearbyNotableObservationsParams'/
  -> ClientM [SomeObservation]
recentNearbyNotableObservations :: Text
-> Double
-> Double
-> RecentNearbyNotableObservationsParams
-> ClientM [SomeObservation]
recentNearbyNotableObservations Text
k Double
lat Double
lng RecentNearbyNotableObservationsParams{Maybe Bool
Maybe Integer
Maybe DetailLevel
Maybe SPPLocale
_recentNearbyNotableObservationsParamsRadius :: Maybe Integer
_recentNearbyNotableObservationsParamsDetail :: Maybe DetailLevel
_recentNearbyNotableObservationsParamsBack :: Maybe Integer
_recentNearbyNotableObservationsParamsHotspot :: Maybe Bool
_recentNearbyNotableObservationsParamsMaxResults :: Maybe Integer
_recentNearbyNotableObservationsParamsLocale :: Maybe SPPLocale
_recentNearbyNotableObservationsParamsRadius :: RecentNearbyNotableObservationsParams -> Maybe Integer
_recentNearbyNotableObservationsParamsDetail :: RecentNearbyNotableObservationsParams -> Maybe DetailLevel
_recentNearbyNotableObservationsParamsBack :: RecentNearbyNotableObservationsParams -> Maybe Integer
_recentNearbyNotableObservationsParamsHotspot :: RecentNearbyNotableObservationsParams -> Maybe Bool
_recentNearbyNotableObservationsParamsMaxResults :: RecentNearbyNotableObservationsParams -> Maybe Integer
_recentNearbyNotableObservationsParamsLocale :: RecentNearbyNotableObservationsParams -> Maybe SPPLocale
..} =
    Text
-> Double
-> Double
-> Maybe Integer
-> Maybe DetailLevel
-> Maybe Integer
-> Maybe Bool
-> Maybe Integer
-> Maybe SPPLocale
-> ClientM [SomeObservation]
recentNearbyNotableObservations_ Text
k Double
lat Double
lng
      Maybe Integer
_recentNearbyNotableObservationsParamsRadius
      Maybe DetailLevel
_recentNearbyNotableObservationsParamsDetail
      Maybe Integer
_recentNearbyNotableObservationsParamsBack
      Maybe Bool
_recentNearbyNotableObservationsParamsHotspot
      Maybe Integer
_recentNearbyNotableObservationsParamsMaxResults
      Maybe SPPLocale
_recentNearbyNotableObservationsParamsLocale

-- | Optional parameters accepted by the 'RecentNearbyNotableObservationsAPI'.
--
-- Note that 'defaultRecentNearbyNotableObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_recentNearbyNotableObservationsParamsRadius' field to 10km:
--
-- > def & recentNearbyNotableObservationsParamsRadius ?~ 10
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #radius ?~ 10
data RecentNearbyNotableObservationsParams =
    RecentNearbyNotableObservationsParams
      { -- | Search radius from the given latitude/longitude in kilometers
        --
        -- /0 - 50, default: 25/
        RecentNearbyNotableObservationsParams -> Maybe Integer
_recentNearbyNotableObservationsParamsRadius :: Maybe Integer

        -- | Detail level for the resulting observations
        --
        -- /default: 'Simple'/
      , RecentNearbyNotableObservationsParams -> Maybe DetailLevel
_recentNearbyNotableObservationsParamsDetail :: Maybe DetailLevel

        -- | How many days back to look for observations
        --
        -- /1 - 30, default: 14/
      , RecentNearbyNotableObservationsParams -> Maybe Integer
_recentNearbyNotableObservationsParamsBack :: Maybe Integer

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , RecentNearbyNotableObservationsParams -> Maybe Bool
_recentNearbyNotableObservationsParamsHotspot :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , RecentNearbyNotableObservationsParams -> Maybe Integer
_recentNearbyNotableObservationsParamsMaxResults :: Maybe Integer

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , RecentNearbyNotableObservationsParams -> Maybe SPPLocale
_recentNearbyNotableObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> RecentNearbyNotableObservationsParams -> ShowS
[RecentNearbyNotableObservationsParams] -> ShowS
RecentNearbyNotableObservationsParams -> String
(Int -> RecentNearbyNotableObservationsParams -> ShowS)
-> (RecentNearbyNotableObservationsParams -> String)
-> ([RecentNearbyNotableObservationsParams] -> ShowS)
-> Show RecentNearbyNotableObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RecentNearbyNotableObservationsParams -> ShowS
showsPrec :: Int -> RecentNearbyNotableObservationsParams -> ShowS
$cshow :: RecentNearbyNotableObservationsParams -> String
show :: RecentNearbyNotableObservationsParams -> String
$cshowList :: [RecentNearbyNotableObservationsParams] -> ShowS
showList :: [RecentNearbyNotableObservationsParams] -> ShowS
Show, ReadPrec [RecentNearbyNotableObservationsParams]
ReadPrec RecentNearbyNotableObservationsParams
Int -> ReadS RecentNearbyNotableObservationsParams
ReadS [RecentNearbyNotableObservationsParams]
(Int -> ReadS RecentNearbyNotableObservationsParams)
-> ReadS [RecentNearbyNotableObservationsParams]
-> ReadPrec RecentNearbyNotableObservationsParams
-> ReadPrec [RecentNearbyNotableObservationsParams]
-> Read RecentNearbyNotableObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS RecentNearbyNotableObservationsParams
readsPrec :: Int -> ReadS RecentNearbyNotableObservationsParams
$creadList :: ReadS [RecentNearbyNotableObservationsParams]
readList :: ReadS [RecentNearbyNotableObservationsParams]
$creadPrec :: ReadPrec RecentNearbyNotableObservationsParams
readPrec :: ReadPrec RecentNearbyNotableObservationsParams
$creadListPrec :: ReadPrec [RecentNearbyNotableObservationsParams]
readListPrec :: ReadPrec [RecentNearbyNotableObservationsParams]
Read, RecentNearbyNotableObservationsParams
-> RecentNearbyNotableObservationsParams -> Bool
(RecentNearbyNotableObservationsParams
 -> RecentNearbyNotableObservationsParams -> Bool)
-> (RecentNearbyNotableObservationsParams
    -> RecentNearbyNotableObservationsParams -> Bool)
-> Eq RecentNearbyNotableObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecentNearbyNotableObservationsParams
-> RecentNearbyNotableObservationsParams -> Bool
== :: RecentNearbyNotableObservationsParams
-> RecentNearbyNotableObservationsParams -> Bool
$c/= :: RecentNearbyNotableObservationsParams
-> RecentNearbyNotableObservationsParams -> Bool
/= :: RecentNearbyNotableObservationsParams
-> RecentNearbyNotableObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultRecentNearbyNotableObservationsParams :: RecentNearbyNotableObservationsParams
defaultRecentNearbyNotableObservationsParams :: RecentNearbyNotableObservationsParams
defaultRecentNearbyNotableObservationsParams =
    RecentNearbyNotableObservationsParams
      { _recentNearbyNotableObservationsParamsRadius :: Maybe Integer
_recentNearbyNotableObservationsParamsRadius = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbyNotableObservationsParamsDetail :: Maybe DetailLevel
_recentNearbyNotableObservationsParamsDetail = Maybe DetailLevel
forall a. Maybe a
Nothing
      , _recentNearbyNotableObservationsParamsBack :: Maybe Integer
_recentNearbyNotableObservationsParamsBack = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbyNotableObservationsParamsHotspot :: Maybe Bool
_recentNearbyNotableObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _recentNearbyNotableObservationsParamsMaxResults :: Maybe Integer
_recentNearbyNotableObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _recentNearbyNotableObservationsParamsLocale :: Maybe SPPLocale
_recentNearbyNotableObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default RecentNearbyNotableObservationsParams where
  def :: RecentNearbyNotableObservationsParams
def = RecentNearbyNotableObservationsParams
defaultRecentNearbyNotableObservationsParams

-- ** Optics for 'RecentNearbyNotableObservationsParams'
makeLenses ''RecentNearbyNotableObservationsParams
makeFieldLabels ''RecentNearbyNotableObservationsParams

-------------------------------------------------------------------------------
-- * Historical observations
-------------------------------------------------------------------------------

-- | Get a list of observations for each species seen on a specific date.
--
-- For example, get a list of 10 fully detailed observations for each species
-- seen on July 11th, 2023 in Park County, Wyoming (using @-XOverloadedLabels@
-- and @-XOverloadedStrings@):
--
-- @
-- askEBird $
--   historicalObservations key
--     "US-WY-029"
--     "2023-07-11"
--     (def & #maxResults ?~ 10 & #detail ?~ Full)
-- @
--
-- See the [eBird API documentation for the corresponding
-- endpoint](https://documenter.getpostman.com/view/664302/S1ENwy59#2d8c6ee8-c435-4e91-9f66-6d3eeb09edd2).
historicalObservations
  :: Text
  -- ^ eBird API key
  -> RegionCode
  -- ^ Region(s) to get observations from
  -> EBirdDate
  -- ^ Date to get observations on, from year 1800 to present
  -> HistoricalObservationsParams
  -- ^ Optional parameters
  --
  -- /default: 'defaultHistoricalObservationsParams'/
  -> ClientM [SomeObservation]
historicalObservations :: Text
-> RegionCode
-> EBirdDate
-> HistoricalObservationsParams
-> ClientM [SomeObservation]
historicalObservations Text
k RegionCode
r EBirdDate
date HistoricalObservationsParams{Maybe Bool
Maybe Integer
Maybe DetailLevel
Maybe SelectObservation
Maybe RegionCode
Maybe SPPLocale
Maybe TaxonomyCategories
_historicalObservationsParamsCategories :: Maybe TaxonomyCategories
_historicalObservationsParamsDetail :: Maybe DetailLevel
_historicalObservationsParamsHotspot :: Maybe Bool
_historicalObservationsParamsProvisional :: Maybe Bool
_historicalObservationsParamsMaxResults :: Maybe Integer
_historicalObservationsParamsSelect :: Maybe SelectObservation
_historicalObservationsParamsExtraRegions :: Maybe RegionCode
_historicalObservationsParamsLocale :: Maybe SPPLocale
_historicalObservationsParamsCategories :: HistoricalObservationsParams -> Maybe TaxonomyCategories
_historicalObservationsParamsDetail :: HistoricalObservationsParams -> Maybe DetailLevel
_historicalObservationsParamsHotspot :: HistoricalObservationsParams -> Maybe Bool
_historicalObservationsParamsProvisional :: HistoricalObservationsParams -> Maybe Bool
_historicalObservationsParamsMaxResults :: HistoricalObservationsParams -> Maybe Integer
_historicalObservationsParamsSelect :: HistoricalObservationsParams -> Maybe SelectObservation
_historicalObservationsParamsExtraRegions :: HistoricalObservationsParams -> Maybe RegionCode
_historicalObservationsParamsLocale :: HistoricalObservationsParams -> Maybe SPPLocale
..} =
    Text
-> RegionCode
-> Integer
-> Integer
-> Integer
-> Maybe TaxonomyCategories
-> Maybe DetailLevel
-> Maybe Bool
-> Maybe Bool
-> Maybe Integer
-> Maybe SelectObservation
-> Maybe RegionCode
-> Maybe SPPLocale
-> ClientM [SomeObservation]
historicalObservations_ Text
k RegionCode
r Integer
y Integer
m Integer
d
      Maybe TaxonomyCategories
_historicalObservationsParamsCategories
      Maybe DetailLevel
_historicalObservationsParamsDetail
      Maybe Bool
_historicalObservationsParamsHotspot
      Maybe Bool
_historicalObservationsParamsProvisional
      Maybe Integer
_historicalObservationsParamsMaxResults
      Maybe SelectObservation
_historicalObservationsParamsSelect
      Maybe RegionCode
_historicalObservationsParamsExtraRegions
      Maybe SPPLocale
_historicalObservationsParamsLocale
  where
    (Integer
y,Integer
m,Integer
d) = EBirdDate -> (Integer, Integer, Integer)
eBirdDateToGregorian EBirdDate
date

-- | Optional parameters accepted by the 'HistoricalObservationsAPI'.
--
-- Note that 'defaultHistoricalObservationsParams' (or the 'Default'
-- instance's 'def' value) may be used to accept the defaults of the eBird API.
--
-- Additionally, note that there are optics available for manipulating this
-- type. For example, if you would like to just set the
-- '_historicalObservationsParamsDetail' field to 'Full':
--
-- > def & historicalObservationsParamsDetail ?~ Full
--
-- Or, using @-XOverloadedLabels@:
--
-- > def & #detail ?~ Full
data HistoricalObservationsParams =
    HistoricalObservationsParams
      { -- | Only include observations in these taxonomy categories
        --
        -- /default: all/
        HistoricalObservationsParams -> Maybe TaxonomyCategories
_historicalObservationsParamsCategories :: Maybe TaxonomyCategories

        -- | Detail level for the resulting observations
        --
        -- /default: 'Simple'/
      , HistoricalObservationsParams -> Maybe DetailLevel
_historicalObservationsParamsDetail :: Maybe DetailLevel

        -- | Only get observations from hotspots
        --
        -- /default: 'False'/
      , HistoricalObservationsParams -> Maybe Bool
_historicalObservationsParamsHotspot :: Maybe Bool

        -- | Include observations which have not been reviewed
        --
        -- /default: 'False'/
      , HistoricalObservationsParams -> Maybe Bool
_historicalObservationsParamsProvisional :: Maybe Bool

        -- | Maximum number of observations to get
        --
        -- /1 - 10000, default: all/
      , HistoricalObservationsParams -> Maybe Integer
_historicalObservationsParamsMaxResults :: Maybe Integer

        -- | Whether to display the first or last observation of a species on
        -- the date, in the case that there are multiple observations of the
        -- same species on the date
        --
        -- /default: 'SelectLastObservation'/
      , HistoricalObservationsParams -> Maybe SelectObservation
_historicalObservationsParamsSelect :: Maybe SelectObservation

        -- | Up to 50 extra regions to get observations from
        --
        -- /default: none/
      , HistoricalObservationsParams -> Maybe RegionCode
_historicalObservationsParamsExtraRegions :: Maybe RegionCode

        -- | Return observations with common names in this locale
        --
        -- /default: 'En'/
      , HistoricalObservationsParams -> Maybe SPPLocale
_historicalObservationsParamsLocale :: Maybe SPPLocale
      }
  deriving (Int -> HistoricalObservationsParams -> ShowS
[HistoricalObservationsParams] -> ShowS
HistoricalObservationsParams -> String
(Int -> HistoricalObservationsParams -> ShowS)
-> (HistoricalObservationsParams -> String)
-> ([HistoricalObservationsParams] -> ShowS)
-> Show HistoricalObservationsParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HistoricalObservationsParams -> ShowS
showsPrec :: Int -> HistoricalObservationsParams -> ShowS
$cshow :: HistoricalObservationsParams -> String
show :: HistoricalObservationsParams -> String
$cshowList :: [HistoricalObservationsParams] -> ShowS
showList :: [HistoricalObservationsParams] -> ShowS
Show, ReadPrec [HistoricalObservationsParams]
ReadPrec HistoricalObservationsParams
Int -> ReadS HistoricalObservationsParams
ReadS [HistoricalObservationsParams]
(Int -> ReadS HistoricalObservationsParams)
-> ReadS [HistoricalObservationsParams]
-> ReadPrec HistoricalObservationsParams
-> ReadPrec [HistoricalObservationsParams]
-> Read HistoricalObservationsParams
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS HistoricalObservationsParams
readsPrec :: Int -> ReadS HistoricalObservationsParams
$creadList :: ReadS [HistoricalObservationsParams]
readList :: ReadS [HistoricalObservationsParams]
$creadPrec :: ReadPrec HistoricalObservationsParams
readPrec :: ReadPrec HistoricalObservationsParams
$creadListPrec :: ReadPrec [HistoricalObservationsParams]
readListPrec :: ReadPrec [HistoricalObservationsParams]
Read, HistoricalObservationsParams
-> HistoricalObservationsParams -> Bool
(HistoricalObservationsParams
 -> HistoricalObservationsParams -> Bool)
-> (HistoricalObservationsParams
    -> HistoricalObservationsParams -> Bool)
-> Eq HistoricalObservationsParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: HistoricalObservationsParams
-> HistoricalObservationsParams -> Bool
== :: HistoricalObservationsParams
-> HistoricalObservationsParams -> Bool
$c/= :: HistoricalObservationsParams
-> HistoricalObservationsParams -> Bool
/= :: HistoricalObservationsParams
-> HistoricalObservationsParams -> Bool
Eq)

-- | Note that this value does not actually use the eBird API default values.
-- It simply sets every option to 'Nothing', which means we just don't send any
-- of these parameters to the eBird API and they will use /their own/ defaults.
defaultHistoricalObservationsParams :: HistoricalObservationsParams
defaultHistoricalObservationsParams :: HistoricalObservationsParams
defaultHistoricalObservationsParams =
    HistoricalObservationsParams
      { _historicalObservationsParamsCategories :: Maybe TaxonomyCategories
_historicalObservationsParamsCategories = Maybe TaxonomyCategories
forall a. Maybe a
Nothing
      , _historicalObservationsParamsDetail :: Maybe DetailLevel
_historicalObservationsParamsDetail = Maybe DetailLevel
forall a. Maybe a
Nothing
      , _historicalObservationsParamsHotspot :: Maybe Bool
_historicalObservationsParamsHotspot = Maybe Bool
forall a. Maybe a
Nothing
      , _historicalObservationsParamsProvisional :: Maybe Bool
_historicalObservationsParamsProvisional = Maybe Bool
forall a. Maybe a
Nothing
      , _historicalObservationsParamsMaxResults :: Maybe Integer
_historicalObservationsParamsMaxResults = Maybe Integer
forall a. Maybe a
Nothing
      , _historicalObservationsParamsSelect :: Maybe SelectObservation
_historicalObservationsParamsSelect = Maybe SelectObservation
forall a. Maybe a
Nothing
      , _historicalObservationsParamsExtraRegions :: Maybe RegionCode
_historicalObservationsParamsExtraRegions = Maybe RegionCode
forall a. Maybe a
Nothing
      , _historicalObservationsParamsLocale :: Maybe SPPLocale
_historicalObservationsParamsLocale = Maybe SPPLocale
forall a. Maybe a
Nothing
      }

instance Default HistoricalObservationsParams where
  def :: HistoricalObservationsParams
def = HistoricalObservationsParams
defaultHistoricalObservationsParams

-- ** Optics for 'HistoricalObservationsParams'
makeLenses ''HistoricalObservationsParams
makeFieldLabels ''HistoricalObservationsParams