# -*- encoding : utf-8 -*-
class Card; module Set; class All
# Set: All cards (New)
#
module New;
extend Card::Set
def self.source_location; "/Users/ethan/dev/decko/gem/card-mod-edit/set/all/new.rb"; end
module HtmlFormat; module_parent.send :register_set_format, Card::Format::HtmlFormat, self; extend Card::Set::AbstractFormat
  delegate :autoname?, to: :card

  view :new, perms: :create, unknown: true, cache: :never do
    new_view_frame_and_form new_form_opts
  end

  view :new_content_form, wrap: :slot, unknown: true, cache: :never do
    with_nest_mode :edit do
      create_form
    end
  end

  view :new_in_modal, perms: :create, unknown: true, cache: :never,
                      wrap: { modal: { footer: "", size: :edit_modal_size,
                                       title: :new_in_modal_title,
                                       menu: :new_modal_menu } } do
    _render_new_content_form
  end

  def create_form
    form_opts = new_in_modal_form_opts.reverse_merge(success: new_in_modal_success)
    buttons = form_opts.delete(:buttons) || _render_new_buttons

    voo.title ||= new_view_title if new_name_prompt?
    voo.show :help
    card_form(:create, form_opts) do
      create_form_with_alert_guide buttons
    end
  end

  def new_modal_size
    :large
  end

  def new_modal_menu
    wrap_with_modal_menu do
      [close_modal_window, render_bridge_link]
    end
  end

  def new_view_frame_and_form form_opts={}
    buttons = form_opts.delete(:buttons) || _render_new_buttons
    form_opts = form_opts.reverse_merge(success: new_success)

    with_nest_mode :edit do
      voo.title ||= new_view_title if new_name_prompt?
      voo.show :help
      frame_and_form :create, form_opts do
        create_form_with_alert_guide buttons
      end
    end
  end

  def create_form_with_alert_guide buttons
    wrap_with :div, class: "d-flex justify-content-between" do
      [(wrap_with(:div, class: "w-100") do
        [
          new_view_hidden,
          new_view_name,
          new_view_type,
          _render_content_formgroups,
          buttons
        ]
      end),
       (alert_guide if voo.show?(:guide))]
    end
  end

  def new_view_hidden; end

  def new_in_modal_form_opts
    { "data-slot-selector": "modal-origin", "data-slot-error-selector": ".card-slot",
      buttons: _render_new_in_modal_buttons }
  end

  def new_form_opts
    { "main-success" => "REDIRECT" }
  end

  def new_view_title
    output(
      "New",
      (card.type_name unless card.type_id == Card.default_type_id)
    )
  end

  def new_in_modal_title
    new_name_prompt? ? new_view_title : render_title
  end

  def new_success
    card.rule(:thanks) || "_self"
  end

  def new_in_modal_success; end

  # NAME HANDLING

  def new_view_name
    if new_name_prompt?
      new_name_formgroup
    elsif !autoname?
      hidden_field_tag "card[name]", card.name
    end
  end

  def new_name_formgroup
    output _render_name_formgroup,
           hidden_field_tag("name_prompt", true)
  end

  def new_name_prompt?
    voo.visible? :name_formgroup do
      needs_name? || params[:name_prompt]
    end
  end

  def needs_name?
    card.name.blank? && !autoname?
  end

  # TYPE HANDLING

  def new_view_type
    if new_type_prompt?
      _render_new_type_formgroup
    else
      hidden_field_tag "card[type_id]", card.type_id
    end
  end

  def new_type_prompt?
    voo.visible? :new_type_formgroup do
      !new_type_preset? && new_type_prompt_context? && new_type_permitted?
    end
  end

  def new_type_preset?
    params[:type] || voo.type
  end

  def new_type_prompt_context?
    main? || card.simple? || card.is_template?
  end

  def new_type_permitted?
    Card.new(type_id: card.type_id).ok? :create
  end

  view :new_type_formgroup do
    wrap_type_formgroup do
      type_field class: "type-field live-type-field",
                 href: path(view: :new),
                 "data-remote" => true
    end
  end

  view :new_buttons do
    button_formgroup do
      [standard_create_button, standard_cancel_button(cancel_button_new_args)]
    end
  end

  view :new_in_modal_buttons do
    button_formgroup do
      wrap_with "div", class: "d-flex" do
        [standard_save_and_close_button(text: "Submit"), modal_cancel_button]
      end
    end
  end

  # path to redirect to after canceling a new form
  def cancel_button_new_args
    href = case
           when main?          then path_to_previous
           when voo&.home_view then path(view: voo.home_view)
           else                     path(view: :unknown)
           end
    { href: href }
  end

  def standard_create_button
    submit_button class: "submit-button create-submit-button"
  end
end
end;end;end;end;
# ~~ generated from /Users/ethan/dev/decko/gem/card-mod-edit/set/all/new.rb ~~