module Handler.Modify where

import Import
import Handler.Common

getModifyR :: BeverageId -> Handler Html
getModifyR bId = do
  mBev <- runDB $ get bId
  case mBev of
    Just bev -> do
      (modifyWidget, enctype) <- generateFormPost $ modifyForm bev
      defaultLayout $ do
        $(widgetFile "modify")
    Nothing -> do
      setMessage "Artikel unbekannt"
      redirect $ SummaryR

postModifyR :: BeverageId -> Handler Html
postModifyR bId = do
  mBev <- runDB $ get bId
  case mBev of
    Just bev -> do
      ((res, _), _) <- runFormPost $ modifyForm bev
      case res of
        FormSuccess nBev -> do
          runDB $ update bId
            [ BeverageIdent =. beverageIdent nBev
            , BeveragePrice =. beveragePrice nBev
            , BeverageAmount =. beverageAmount nBev
            , BeverageAlertAmount =. beverageAlertAmount nBev
            ]
          setMessage "Bearbeitung erfolgreich"
          redirect $ SummaryR
        _ -> do
          setMessage "Bearbeitung nicht möglich"
          redirect $ SummaryR
    Nothing -> do
      setMessage "Artikel unbekannt"
      redirect $ SummaryR

modifyForm :: Beverage -> Form Beverage
modifyForm bev = renderDivs $ Beverage
  <$> areq textField "Name" (Just $ beverageIdent bev)
  <*> areq currencyField "Preis" (Just $ beveragePrice bev)
  <*> areq amountField "aktueller Bestand" (Just $ beverageAmount bev)
  <*> areq amountField "Meldebestand" (Just $ beverageAlertAmount bev)

getDeleteBeverageR :: BeverageId -> Handler Html
getDeleteBeverageR bId = do
  mBev <- runDB $ get bId
  case mBev of
    Just bev -> do
      runDB $ delete bId
      setMessage "Artikel gelöscht"
      redirect $ HomeR
    Nothing -> do
      setMessage "Artikel unbekannt"
      redirect $ HomeR