content: module Main where
  
  import IHP.Prelude
  import qualified System.Directory as Directory
  import qualified System.Posix.Env.ByteString as Posix
  import IHP.IDE.CodeGen.ControllerGenerator
  import IHP.IDE.CodeGen.Controller (undoPlan)
  import qualified Data.Text as Text
  import Main.Utf8 (withUtf8)
  
  main :: IO ()
  main = withUtf8 do
      ensureIsInAppDirectory
  
      args <- map cs <$> Posix.getArgs
      case headMay args of
          Just "" -> usage
          Just appAndControllerName -> case Text.splitOn "." appAndControllerName of
              [controllerName] -> deleteController "Web" controllerName
              [applicationName, controllerName] -> deleteController applicationName controllerName
              _ -> usage
          _ -> usage
  
  deleteController applicationName controllerName = do
      let paginationEnabled = False
      planOrError <- buildPlan applicationName controllerName paginationEnabled
      case planOrError of
          Left error -> putStrLn error
          Right plan -> undoPlan $ reverse plan
  
  usage :: IO ()
  usage = putStrLn "Usage: delete-controller RESOURCE_NAME"
  
  ensureIsInAppDirectory :: IO ()
  ensureIsInAppDirectory = do
      mainHsExists <- Directory.doesFileExist "Main.hs"
      unless mainHsExists (fail "You have to be in a project directory to run the generator")