content: {-# LANGUAGE MultiParamTypeClasses #-}
  {-# OPTIONS_GHC -fno-warn-orphans #-}
  
  module Haskell.Debug.Adapter.State.GHCiRun.ConfigurationDone where
  
  import Control.Monad.IO.Class
  import qualified System.Log.Logger as L
  import Control.Monad.State
  import Control.Lens
  
  
  import qualified Haskell.DAP as DAP
  import Haskell.Debug.Adapter.Type
  import Haskell.Debug.Adapter.Constant
  import qualified Haskell.Debug.Adapter.Utility as U
  
  -- |
  --  Any errors should be sent back as False result Response
  --
  instance StateActivityIF GHCiRunStateData DAP.ConfigurationDoneRequest where
    action _ (ConfigurationDoneRequest req) = do
      liftIO $ L.debugM _LOG_APP $ "GHCiRunState ConfigurationDoneRequest called. " ++ show req
      app req
  
  -- |
  --   @see https://github.com/Microsoft/vscode/issues/4902
  --   @see https://microsoft.github.io/debug-adapter-protocol/overview
  --
  app :: DAP.ConfigurationDoneRequest -> AppContext (Maybe StateTransit)
  app req = do
  
    -- U.sendConsoleEvent _DEBUG_START_MSG
    -- U.sendStdoutEvent _GHCI_PROMPT_HDA
  
    resSeq <- U.getIncreasedResponseSequence
    let res = DAP.defaultConfigurationDoneResponse {
              DAP.seqConfigurationDoneResponse = resSeq
            , DAP.request_seqConfigurationDoneResponse = DAP.seqConfigurationDoneRequest req
            , DAP.successConfigurationDoneResponse = True
            }
  
    U.addResponse $ ConfigurationDoneResponse res
  
    -- launch response must be sent after configuration done response.
    reqSeq <- view launchReqSeqAppStores <$> get
    resSeq <- U.getIncreasedResponseSequence
    let res = DAP.defaultLaunchResponse {
              DAP.seqLaunchResponse         = resSeq
            , DAP.request_seqLaunchResponse = reqSeq
            , DAP.successLaunchResponse     = True
            }
  
    U.addResponse $ LaunchResponse res
  
    return $ Just GHCiRun_DebugRun
  
  {-
  -- |
  --
  --
  _DEBUG_START_MSG :: String
  _DEBUG_START_MSG = L.intercalate "\n" [
      ""
    , "  Now, ghci launched and configuration done."
    , "  Press F5 to start debugging."
    , "  Or modify source code. it will be loaded to ghci automatically."
    , " "
    ]
  -}
  
  