module IHP.IDE.CodeGen.View.NewScript where

import IHP.ViewPrelude
import IHP.IDE.ToolServer.Types
import IHP.IDE.CodeGen.Types
import IHP.IDE.CodeGen.View.Generators (renderPlan)

data NewScriptView = NewScriptView
    { NewScriptView -> Either Text [GeneratorAction]
plan :: Either Text [GeneratorAction]
    , NewScriptView -> Text
scriptName :: Text
    }

instance View NewScriptView where
    html :: (?context::ControllerContext, ?view::NewScriptView) =>
NewScriptView -> Html
html NewScriptView { Either Text [GeneratorAction]
Text
$sel:plan:NewScriptView :: NewScriptView -> Either Text [GeneratorAction]
$sel:scriptName:NewScriptView :: NewScriptView -> Text
plan :: Either Text [GeneratorAction]
scriptName :: Text
.. } = [hsx|
        <div class="generators">
            {renderFlashMessages}
            <div class="container pt-5">
                <div class="code-generator new-script">
                    {if isEmpty then renderEmpty else renderPreview}
                    {unless isEmpty (renderPlan plan)}
                </div>
            </div>
        </div>
    |]
        where
            renderEmpty :: Html
renderEmpty = [hsx|<form method="POST" action={NewScriptAction} class="d-flex">
                    <input
                        type="text"
                        name="name"
                        placeholder="Script name"
                        class="form-control"
                        autofocus="autofocus"
                        value={scriptName}
                        />

                    <button class="btn btn-primary" type="submit">Preview</button>
                </form>|]

            renderPreview :: Html
renderPreview = [hsx|
                <form method="POST" action={CreateScriptAction} class="d-flex">
                    <div class="object-name flex-grow-1">{scriptName}</div>

                    <input type="hidden" name="name" value={scriptName}/>

                    <button class="btn btn-primary" type="submit">Generate</button>
                </form>
            |]


            isEmpty :: Bool
isEmpty = Text -> Bool
forall mono. MonoFoldable mono => mono -> Bool
null Text
scriptName