content: {-# LANGUAGE OverloadedStrings #-}
  module UI.AskForSaveFilename
    ( drawAskForSaveFilenameUI
    )
  where
  
  import qualified Data.Text as T
  import Lens.Micro.Platform
  
  import Brick
  import Brick.Widgets.Border
  import Brick.Widgets.Center
  import Brick.Widgets.Edit
  
  import Types
  import Theme
  
  drawAskForSaveFilenameUI :: Bool -> AppState -> [Widget Name]
  drawAskForSaveFilenameUI isQuitting s = [drawPromptWindow isQuitting s]
  
  drawPromptWindow :: Bool -> AppState -> Widget Name
  drawPromptWindow isQuitting s =
      centerLayer $
      borderWithLabel (str "Save") $
          hLimit 60 $
          padLeftRight 2 $ padTopBottom 1 body
      where
          help = if isQuitting
                    then hBox [ str "("
                              , withDefAttr keybindingAttr $ str "Enter"
                              , str " to save and quit, "
                              , withDefAttr keybindingAttr $ str "Esc"
                              , str " to quit without saving)"
                              ]
                    else hBox [ str "("
                              , withDefAttr keybindingAttr $ str "Enter"
                              , str " to save, "
                              , withDefAttr keybindingAttr $ str "Esc"
                              , str " to cancel)"
                              ]
          body = maybeError <=>
                 (hCenter $ str "Save changes to:") <=>
                 (hCenter help) <=>
                 padTopBottom 1 fn
          maybeError = maybe emptyWidget mkSaveError (s^.saveError)
          mkSaveError msg = withDefAttr errorAttr $
                            (hCenter $ txt "Error saving:") <=>
                            (padBottom (Pad 1) $ txtWrap msg)
          renderString = txt . T.unlines
          fn = str "Path: " <+> renderEditor renderString True (s^.askToSaveFilenameEdit)
  