<% admin_breadcrumb(plural_resource_name(SolidusSubscriptions::Subscription)) %>

<% content_for :page_actions do %>
  <li><%= link_to t('.new_subscription'), new_admin_subscription_path, class: 'btn btn-primary' %></li>
<% end %>

<% content_for :table_filter_title do %>
  <%= I18n.t('spree.search') %>
<% end %>

<% content_for :table_filter do %>
  <div data-hook="admin_subscriptions_index_search">
    <%= search_form_for [:admin, @search] do |f| %>
      <div class="row">
        <div class="field-block col-6">
          <div class="date-range-filter field">
            <%= label_tag :q_created_at_gt, I18n.t('spree.date_range') %>
            <div class="date-range-fields input-group">
              <%= f.text_field :created_at_gt, class: 'datepicker form-control datepicker-from', placeholder: I18n.t('spree.start') %>

              <div class="input-group-prepend input-group-append">
                <span class="input-group-text range-divider">
                  <i class="fa fa-arrow-right"></i>
                </span>
              </div>

              <%= f.text_field :created_at_lt, class: 'datepicker form-control datepicker-to', placeholder: I18n.t('spree.stop') %>
            </div>
          </div>
        </div>

        <div class="field-block col-6">
          <div class="date-range-filter field">
            <%= label_tag :q_actionable_date_gt, SolidusSubscriptions::Subscription.human_attribute_name(:actionable_date) %>
            <div class="date-range-fields input-group">
              <%= f.text_field :actionable_date_gt, class: 'datepicker form-control datepicker-from', placeholder: I18n.t('spree.start') %>

              <div class="input-group-prepend input-group-append">
                <span class="input-group-text range-divider">
                  <i class="fa fa-arrow-right"></i>
                </span>
              </div>

              <%= f.text_field :actionable_date_lt, class: 'datepicker form-control datepicker-to', placeholder: I18n.t('spree.stop') %>
            </div>
          </div>
        </div>
      </div>

      <div class="row">
        <div class="field-block col-3">
          <div class="field">
            <%= label_tag :q_user_email_cont, Spree.user_class.human_attribute_name(:email) %>
            <%= f.text_field :user_email_cont, size: 25 %>
          </div>
        </div>

        <div class="field-block col-3">
          <div class="field">
            <%= label_tag :q_state_eq, SolidusSubscriptions::Subscription.human_attribute_name(:state) %>
            <%= f.select :state_eq, SolidusSubscriptions::Subscription.state_machines[:state].states.map {|s| [s.human_name, s.value]}, {include_blank: true}, class: 'select2 fullwidth' %>
          </div>
        </div>

        <div class="field-block col-3">
          <div class="field">
            <%= label_tag :q_processing_state_eq, SolidusSubscriptions::Subscription.human_attribute_name(:processing_state) %>

            <%
              processing_states = SolidusSubscriptions::Subscription.processing_states.map do |state|
                [
                    SolidusSubscriptions::Subscription.human_attribute_name("processing_state.#{ state }"),
                    state
                ]
              end
            %>

            <%=
              f.select(
                  :in_processing_state,
                  options_for_select(processing_states, params.dig(:q, :in_processing_state)),
                  { include_blank: true },
                  class: 'select2 fullwidth'
              )
            %>
          </div>
        </div>
        <div class="field-block col-3">
          <div class="field">
            <%= label_tag :q_with_subscribable_eq, SolidusSubscriptions::Subscription.human_attribute_name(:with_subscribable) %>

            <%=
              f.select(
                :with_subscribable,
                options_for_select(::Spree::Variant.includes(:product).where(id: ::SolidusSubscriptions::LineItem.distinct.pluck(:subscribable_id)).map { |subscribable| [ subscribable.name, subscribable.id ]}, params.dig(:q, :with_subscribable)),
                { include_blank: true },
                class: 'select2 fullwidth'
              )
            %>
          </div>
        </div>
      </div>

      <div class="clearfix"></div>
      <div class="actions filter-actions">
        <div data-hook="admin_subscriptions_index_search_buttons">
          <%= button_tag I18n.t('spree.filter_results'), class: 'btn btn-primary' %>
        </div>
      </div>
    <% end %>
  </div>
<% end %>

<%= paginate @subscriptions, theme: 'solidus_admin' %>

<% if @subscriptions.any? %>
  <table id="listing_subscriptions" class="index">
    <thead>
      <tr data-hook="admin_subscriptions_index_headers">
        <th><%= sort_link(@search, :created_at, SolidusSubscriptions::Subscription.human_attribute_name(:created_at)) %></th>
        <th><%= sort_link(@search, :user_email, SolidusSubscriptions::Subscription.human_attribute_name(:user)) %></th>
        <th><%= sort_link(@search, :actionable_date, [:actionable_date, 'id asc'], SolidusSubscriptions::Subscription.human_attribute_name(:actionable_date)) %></th>
        <th><%= sort_link(@search, :line_item_interval_length, SolidusSubscriptions::Subscription.human_attribute_name(:interval)) %></th>
        <th><%= sort_link(@search, :state, [:state, 'id asc'], SolidusSubscriptions::Subscription.human_attribute_name(:state)) %></th>
        <th><%= sort_link(@search, :processing_state, [:processing_state, 'id asc'], SolidusSubscriptions::Subscription.human_attribute_name(:processing_state)) %></th>
        <th><%= SolidusSubscriptions::Subscription.human_attribute_name(:line_items) %></th>
        <th data-hook="admin_subscriptions_index_header_actions" class="actions"></th>
      </tr>
    </thead>

    <tbody>
      <% @subscriptions.each do |subscription| %>
        <tr>
          <td><%= l(subscription.created_at.to_date) %></td>
          <td><%= link_to subscription.user.email, admin_user_path(subscription.user) %></td>
          <td><%= subscription.actionable_date ? l(subscription.actionable_date) : '-' %></td>
          <td><%= subscription.interval.inspect %></td>
          <td><%= render 'state_pill', subscription: subscription %></td>
          <td><%= render 'processing_state_pill', subscription: subscription %></td>
          <td><%= subscription.line_items.includes(subscribable: :product).map { |line_item| line_item.subscribable&.name }.join(", ") %></td>
          <td class="actions">
            <% if subscription.state_events.include?(:cancel) %>
              <%=
                link_to_with_icon(
                    :stop,
                    t('spree.admin.subscriptions.actions.cancel'),
                    spree.cancel_admin_subscription_path(subscription),
                    no_text: true,
                    method: :delete,
                    data: { confirm: t('spree.admin.subscriptions.actions.cancel_alert') }
                )
              %>
            <% end %>

            <% if subscription.state_events.include?(:activate) %>
              <%=
                link_to_with_icon(
                    :play,
                    t('spree.admin.subscriptions.actions.activate'),
                    spree.activate_admin_subscription_path(subscription),
                    no_text: true,
                    method: :post
                )
              %>
            <% end %>

            <% if subscription.active? %>
              <% if subscription.paused? %>
                <%=
                  link_to_with_icon(
                      :'play-circle',
                      t('spree.admin.subscriptions.actions.resume'),
                      spree.resume_admin_subscription_path(subscription),
                      no_text: true,
                      method: :post
                  )
                %>
              <% else %>
                <%=
                  link_to_with_icon(
                      :'pause-circle',
                      t('spree.admin.subscriptions.actions.pause'),
                      spree.pause_admin_subscription_path(subscription),
                      no_text: true,
                      method: :post
                  )
                %>
                <%=
                  link_to_with_icon(
                      :'fast-forward',
                      t('spree.admin.subscriptions.actions.skip'),
                      spree.skip_admin_subscription_path(subscription),
                      no_text: true,
                      method: :post
                  )
                %>
              <% end %>
            <% end %>

            <%= link_to_edit(subscription, no_text: true) %>

          </td>
        </tr>
      <% end %>
    </tbody>
  </table>
<% else %>
  <div class="no-objects-found">
    <%= render 'spree/admin/shared/no_objects_found',
        resource: SolidusSubscriptions::Subscription,
        new_resource_url: spree.new_admin_subscription_path %>
  </div>
<% end %>