module Gargantext.Components.Forest.Tree.Node.Action.Delete
  where

import Gargantext.Prelude

import Data.Maybe (Maybe(..))
import Effect.Aff (Aff)
import Gargantext.Components.Forest.Tree.Node.Action.Types (Action(..))
import Gargantext.Components.Forest.Tree.Node.Tools (submitButton, panel)
import Gargantext.Config.REST (AffRESTError)
import Gargantext.Routes (SessionRoute(..))
import Gargantext.Sessions (Session, delete, put_)
import Gargantext.Types (NodeType(..))
import Gargantext.Types as GT
import Gargantext.Utils.Reactix as R2
import Reactix as R
import Reactix.DOM.HTML as H

here :: R2.Here
here = R2.here "Gargantext.Components.Forest.Tree.Node.Action.Delete"

-- TODO Delete with asyncTaskWithType

deleteNode :: Session -> GT.ID -> AffRESTError GT.ID
deleteNode session nodeId = delete session $ NodeAPI GT.Node (Just nodeId) ""

{-
  case nt of
    NodePublic FolderPublic -> delete session $ NodeAPI GT.Node (Just nodeId) ""
    NodePublic _ -> put_   session $ NodeAPI GT.Node (Just nodeId) "unpublish"
    _            -> delete session $ NodeAPI GT.Node (Just nodeId) ""
    -}

type ParentID = GT.ID
unpublishNode :: Session -> Maybe ParentID -> GT.ID -> AffRESTError GT.ID
unpublishNode s p n = put_ s $ NodeAPI GT.Node p ("unpublish/" <> show n)


-- | Action : Delete
type Delete =
  ( dispatch :: Action -> Aff Unit
  , nodeType :: NodeType )

actionDelete :: R2.Component Delete
actionDelete = R.createElement actionDeleteCpt
actionDeleteCpt :: R.Component Delete
actionDeleteCpt = here.component "actionDelete" cpt where
  cpt props@{ nodeType: NodeUser } _ = pure $ actionDeleteUser props []
  cpt props                        _ = pure $ actionDeleteOther props []

actionDeleteUser :: R2.Component Delete
actionDeleteUser = R.createElement actionDeleteUserCpt
actionDeleteUserCpt :: R.Component Delete
actionDeleteUserCpt = here.component "actionDeleteUser" cpt where
  cpt _  _ = do
    pure $ panel [ H.div { style: {margin: "10px"}}
                    [ H.text $ "Yes, we are RGPD compliant!"
                    <> " But you can not delete User Node yet."
                    <> " We are still on development."
                    <> " Thanks for your comprehensin."
                    ]
            ] (H.div {} [])

actionDeleteOther :: R2.Component Delete
actionDeleteOther = R.createElement actionDeleteOtherCpt
actionDeleteOtherCpt :: R.Component Delete
actionDeleteOtherCpt = here.component "actionDeleteOther" cpt where
  cpt { dispatch, nodeType } _ = do
    pure $ panel (map (\t -> H.p {} [H.text t])
                       [ "Are your sure you want to delete it ?"
                       , "If yes, click again below."
                       ]
                  ) (submitButton (DeleteNode nodeType) dispatch)