{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}

module Hercules.API.Organizations
  ( OrganizationsAPI (..),
  )
where

import Hercules.API.Accounts.Account (Account)
import Hercules.API.Organizations.BillingInfo (BillingInfo)
import Hercules.API.Organizations.CreateOrganization (CreateOrganization)
import Hercules.API.Organizations.Organization (Organization)
import Hercules.API.Organizations.PaymentLink (PaymentLink)
import Hercules.API.Prelude
import Servant.API

data OrganizationsAPI auth f = OrganizationsAPI
  { findOrganizations ::
      f
        :- Summary "Get all organizations user has admin access to"
          :> auth
          :> "api"
          :> "organizations"
          :> Get '[JSON] [Organization],
    createOrganization ::
      f
        :- Summary "Create a new organization"
          :> auth
          :> "api"
          :> "organizations"
          :> ReqBody '[JSON] CreateOrganization
          :> Post '[JSON] Organization,
    connectAccountToOrganization ::
      f
        :- Summary "Connect an account to an organization"
          :> auth
          :> "api"
          :> "organizations"
          :> Capture "organizationId" (Id Organization)
          :> "accounts"
          :> Capture "accountId" (Id Account)
          :> Post '[JSON] NoContent,
    paymentLinkForOrganization ::
      f
        :- Summary "Generate payment link for an organization"
          :> auth
          :> "api"
          :> "organizations"
          :> Capture "organizationId" (Id Organization)
          :> "paymentLink"
          :> Post '[JSON] PaymentLink,
    getOrganizationActiveUsers ::
      f
        :- Summary "List the active users in an organization's accounts."
          :> auth
          :> "api"
          :> "organizations"
          :> Capture "organizationId" (Id Organization)
          :> "billing"
          :> Get '[JSON] BillingInfo
  }
  deriving (Generic)
