module IHP.IDE.SchemaDesigner.View.Migrations.New where
import IHP.ViewPrelude
import IHP.IDE.ToolServer.Helper.View
import IHP.SchemaMigration
import IHP.IDE.ToolServer.Types
import IHP.IDE.ToolServer.Routes
import IHP.IDE.CodeGen.Types

data NewView = NewView { NewView -> [GeneratorAction]
plan :: [GeneratorAction] }

instance View NewView where
    html :: NewView -> Html
html NewView { [GeneratorAction]
plan :: [GeneratorAction]
$sel:plan:NewView :: NewView -> [GeneratorAction]
.. } = [hsx|
        <div class="container pt-5">
            <h1>New Migration</h1>
            <div class="migration pending">
                {renderForm sqlStatements}
            </div>
        </div>
    |]
        where
            sqlStatements :: Text
sqlStatements = [GeneratorAction]
plan
                [GeneratorAction] -> ([GeneratorAction] -> [Text]) -> [Text]
forall t1 t2. t1 -> (t1 -> t2) -> t2
|> (GeneratorAction -> Maybe Text) -> [GeneratorAction] -> [Text]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe \case
                    CreateFile { Text
$sel:fileContent:CreateFile :: GeneratorAction -> Text
fileContent :: Text
fileContent } -> Text -> Maybe Text
forall a. a -> Maybe a
Just Text
fileContent
                    GeneratorAction
_ -> Maybe Text
forall a. Maybe a
Nothing
                [Text] -> ([Text] -> Maybe Text) -> Maybe Text
forall t1 t2. t1 -> (t1 -> t2) -> t2
|> [Text] -> Maybe Text
forall a. [a] -> Maybe a
headMay
                Maybe Text -> (Maybe Text -> Text) -> Text
forall t1 t2. t1 -> (t1 -> t2) -> t2
|> Text -> Maybe Text -> Text
forall a. a -> Maybe a -> a
fromMaybe Text
""


renderForm :: Text -> Html
renderForm :: Text -> Html
renderForm Text
sqlStatements = [hsx|
<form method="POST" action={CreateMigrationAction}>
    <div class="form-group" id="form-group-migration_sqlStatements">
        <textarea name="sqlStatements" placeholder="" id="migration_sqlStatements" class="form-control">{sqlStatements}</textarea>
    </div>
    <div id="migration_sqlStatements_ace"/>

    <div class="d-flex">
        <button class="btn btn-primary">
            <span id="addMigrationVerb">Run</span> Migration
        </button>

        <div class="ml-3 d-flex align-items-center">
            <div class="custom-control custom-switch d-flex align-items-center">
                <input type="checkbox" class="custom-control-input" id="createOnlySwitch" name="createOnly" onchange="addMigrationVerb.innerText = this.checked ? 'Add' : 'Run'"/>
                <label class="custom-control-label text-muted" for="createOnlySwitch" style="font-size: 14px">Create only, don't run yet</label>
            </div>
        </div>
    </div>
</form>
|]