-- | This module exports battery related services.
--
-- @since 0.1
module Pythia.Services.Battery
  ( -- * Queries
    queryBattery,

    -- * Types
    Battery (..),
    Percentage (..),
    BatteryStatus (..),

    -- ** Configuration
    BatteryApp (..),
  )
where

import Pythia.Data.Percentage (Percentage (MkPercentage))
import Pythia.Prelude
import Pythia.Services.Battery.Acpi qualified as Acpi
import Pythia.Services.Battery.SysFs qualified as SysFs
import Pythia.Services.Battery.Types
  ( Battery (MkBattery, percentage, status),
    BatteryApp (BatteryAppAcpi, BatteryAppSysFs, BatteryAppUPower),
    BatteryStatus (Charging, Discharging, Full, Pending),
  )
import Pythia.Services.Battery.UPower qualified as UPower

-- | Queries the battery.
--
-- @since 0.1
queryBattery ::
  ( MonadCatch m,
    MonadFileReader m,
    MonadPathReader m,
    MonadTypedProcess m
  ) =>
  BatteryApp ->
  m Battery
queryBattery :: forall (m :: Type -> Type).
(MonadCatch m, MonadFileReader m, MonadPathReader m,
 MonadTypedProcess m) =>
BatteryApp -> m Battery
queryBattery BatteryApp
BatteryAppAcpi = m Battery
forall (m :: Type -> Type).
(MonadPathReader m, MonadThrow m, MonadTypedProcess m) =>
m Battery
Acpi.batteryShellApp
queryBattery BatteryApp
BatteryAppSysFs = m Battery
forall (m :: Type -> Type).
(MonadFileReader m, MonadPathReader m, MonadThrow m) =>
m Battery
SysFs.batteryQuery
queryBattery BatteryApp
BatteryAppUPower = m Battery
forall (m :: Type -> Type).
(MonadPathReader m, MonadThrow m, MonadTypedProcess m) =>
m Battery
UPower.batteryShellApp