module IHP.IDE.CodeGen.View.NewMigration where

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

data NewMigrationView = NewMigrationView
    { NewMigrationView -> Text
description :: Text
    , NewMigrationView -> Either Text [GeneratorAction]
plan :: Either Text [GeneratorAction]
    , NewMigrationView -> Bool
runMigration :: Bool
    }

instance View NewMigrationView where
    html :: (?context::ControllerContext, ?view::NewMigrationView) =>
NewMigrationView -> Html
html NewMigrationView { Bool
Either Text [GeneratorAction]
Text
$sel:description:NewMigrationView :: NewMigrationView -> Text
$sel:plan:NewMigrationView :: NewMigrationView -> Either Text [GeneratorAction]
$sel:runMigration:NewMigrationView :: NewMigrationView -> Bool
description :: Text
plan :: Either Text [GeneratorAction]
runMigration :: Bool
.. } = [hsx|
        <div class="generators">
            {renderFlashMessages}
            <div class="container pt-5">
                <div class="code-generator new-migration">
                    {renderForm}
                    {renderPlan plan}
                </div>
            </div>
        </div>
    |]
        where
            renderForm :: Html
renderForm = [hsx|
                <form method="POST" action={CreateMigrationAction}>
                    <input type="hidden" name="runMigration" value={inputValue runMigration}/>
                    <div class="d-flex">
                        <input
                            type="text"
                            name="description"
                            placeholder="Migration description"
                            class="form-control"
                            autofocus="autofocus"
                            id="description"
                            value={description}
                            />

                        <button class="btn btn-primary" type="submit">{submitText}</button>
                    </div>
                </form>
                
                <div class="generator-options">
                    <form method="POST" action={NewMigrationAction}>
                        <input
                            type="checkbox"
                            name="runMigration"
                            id="runMigration"
                            checked={runMigration}
                            onchange="this.form.description.value = window.description.value; this.form.submit()"
                        />
                        <input type="hidden" name="runMigration" value={inputValue False}/>
                        <input type="hidden" name="description" value=""/>
                        <label class="pl-1" for="runMigration">Run Migration after <q>Generate</q></label>
                    </form>
                </div>
            |]

            submitText :: Text
            submitText :: Text
submitText = if Bool
runMigration
                    then Text
"Generate & Run"
                    else Text
"Generate"