module Vimeta.UI.Term.Movie
( movieSearch
) where
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as Text
import Network.API.TheMovieDB
import System.Console.Byline
import Vimeta.Core hiding (ask)
import Vimeta.UI.Common.Util
import Vimeta.UI.Term.Common
movieSearch :: Text -> Vimeta (Byline IO) Movie
movieSearch initial = do
name <- byline $ askUntil searchPrompt (Just initial) (notEmpty searchErr)
movies <- tmdb (searchMovies name)
answer <- byline $ askWithMenuRepeatedly (mkMenu movies) prompt eprompt
case answer of
Match movie -> logID movie >> tmdb (fetchMovie (movieID movie))
_ -> die "you need to pick a valid movie"
where
mkMenu movies = banner "Choose a movie:" (menu movies displayMovie)
searchPrompt = "search (movie name): "
searchErr = "please enter a valid search term" <> fg red
prompt = "Which is the correct movie? "
eprompt = "please choose a valid movie" <> fg red
displayMovie m = mconcat [ text (movieTitle m)
, text (parens $ dayAsYear $ movieReleaseDate m)
]
logID movie = verbose $ "using movie ID: " <>
Text.pack (show $ movieID movie)