@use templates::base;
@use template_utils::*;
@use validator::{ValidationErrors, ValidationErrorsKind};
@use std::borrow::Cow;
@use plume_models::medias::*;
@use plume_models::blogs::Blog;
@use plume_models::posts::Post;
@use routes::posts::NewPostForm;
@use routes::*;

@(ctx: BaseContext, blog: Blog, editing: bool, form: &NewPostForm, is_draft: bool, article: Option<Post>, errors: ValidationErrors, medias: Vec<Media>)

@:base(ctx, &i18n!(ctx.1, if editing { "Edit {0}" } else { "New post" }; &form.title), {}, {}, {
    <h1>
        @if editing {
            @i18n!(ctx.1, "Edit {0}"; &form.title)
        } else {
            @i18n!(ctx.1, "Create a new post")
        }
    </h1>
    @if let Some(article) = article {
	    <form class="new-post" method="post" action="@uri!(posts::update: blog = blog.actor_id, slug = &article.slug)">
    } else {
	    <form class="new-post" method="post" action="@uri!(posts::new: blog = blog.actor_id)">
    }
        @input!(ctx.1, title (text), "Title", form, errors.clone(), "required")
        @input!(ctx.1, subtitle (optional text), "Subtitle", form, errors.clone(), "")

        @if let Some(ValidationErrorsKind::Field(errs)) = errors.clone().errors().get("content") {
            @format!(r#"<p class="error">{}</p>"#, i18n!(ctx.1, &*errs[0].message.clone().unwrap_or(Cow::from("Unknown error"))))
        }

        <label for="plume-editor">@i18n!(ctx.1, "Content")<small>@i18n!(ctx.1, "Markdown is supported")</small></label>
        <textarea id="plume-editor" name="content" rows="20">@form.content</textarea>

        @input!(ctx.1, tags (optional text), "Tags, separated by commas", form, errors.clone(), "")

        @input!(ctx.1, license (optional text), "License", "Let it empty reserve all rights", form, errors, "")

        <label for="cover">@i18n!(ctx.1, "Illustration")<small>@i18n!(ctx.1, "Optional")</small></label>
        <select id="cover" name="cover">
            <option value="none" @if form.cover.is_none() { selected }>@i18n!(ctx.1, "None")</option>
            @for media in medias {
                @if media.category() == MediaCategory::Image {
                    <option value="@media.id" @if form.cover.map(|c| c == media.id).unwrap_or(false) { selected }>
                        @if !media.alt_text.is_empty() {
                            @media.alt_text
                        } else {
                            @media.content_warning.unwrap_or_default()
                        }
                    </option>
                }
            }
        </select>

        @if is_draft {
            <label for="draft">
                <input type="checkbox" name="draft" id="draft" checked>
                @i18n!(ctx.1, "This is a draft, don't publish it yet.")
            </label>
        }

        @if editing {
            <input type="submit" value="@i18n!(ctx.1, "Update")" />
        } else {
            @if is_draft {
                <input type="submit" value="@i18n!(ctx.1, "Update or publish")" />
            } else {
                <input type="submit" value="@i18n!(ctx.1, "Publish")" />
            }
        }
    </form>
})