module Sound.Player.Types (
  PlayerApp(..),
  Playback(..),
  Song(..),
  Status(..),
  PlayerEvent(..)
) where

import Brick.Widgets.List (List)
import Control.Concurrent (ThreadId, Chan)
import qualified Graphics.Vty as V
import System.Process (ProcessHandle)

import Sound.Player.AudioInfo (SongInfo)


data PlayerApp = PlayerApp {
    songsList :: List Song,
    playerStatus :: Status,
    playbackChan :: Chan PlayerEvent,
    playback :: Maybe Playback
  }


data Playback = Playback {
    position :: Int,
    process :: ProcessHandle,
    playhead :: Double,
    duration :: Double,
    playheadThread :: ThreadId
  }


data Song = Song {
    songInfo :: Maybe SongInfo,
    songPath :: FilePath,
    songStatus :: Status
  } deriving (Show)


data Status = Play | Pause | Stop
  deriving (Show)


data PlayerEvent = VtyEvent V.Event | PlayheadAdvance