module ProcedureHelper
  def procedure_libelle(procedure)
    parts = procedure.brouillon? ? [procedure_badge(procedure)] : []
    parts << procedure.libelle
    safe_join(parts, ' ')
  end

  def procedure_badge(procedure)
    return nil unless procedure.brouillon?

    tag.span(t('helpers.procedure.testing_procedure'), class: 'fr-badge')
  end

  def procedure_publish_label(procedure, key)
    # i18n-tasks-use t('modal.publish.body.publish')
    # i18n-tasks-use t('modal.publish.body.reopen')
    # i18n-tasks-use t('modal.publish.submit.publish')
    # i18n-tasks-use t('modal.publish.submit.reopen')
    # i18n-tasks-use t('modal.publish.title.publish')
    # i18n-tasks-use t('modal.publish.title.reopen')
    action = procedure.close? ? :reopen : :publish
    t(action, scope: [:modal, :publish, key])
  end

  def procedure_auto_archive_date(procedure)
    I18n.l(procedure.auto_archive_on - 1.day, format: '%-d %B %Y')
  end

  def procedure_auto_archive_time(procedure)
    "à 23 h 59 (heure de " + Rails.application.config.time_zone + ")"
  end

  def procedure_auto_archive_datetime(procedure)
    procedure_auto_archive_date(procedure) + ' ' + procedure_auto_archive_time(procedure)
  end

  def can_manage_groupe_instructeurs?(procedure)
    procedure.routing_enabled? && current_administrateur&.owns?(procedure)
  end

  def can_send_groupe_message?(procedure)
    procedure.dossiers
      .state_brouillon
      .includes(:groupe_instructeur)
      .exists?(groupe_instructeur: current_instructeur.groupe_instructeurs)
  end

  def url_or_email_to_lien_dpo(procedure)
    URI::MailTo.build([procedure.lien_dpo, "subject="]).to_s
  rescue URI::InvalidComponentError
    uri = Addressable::URI.parse(procedure.lien_dpo)
    return "//#{uri}" if uri.scheme.nil?
    uri.to_s
  end

  def estimated_fill_duration_minutes(procedure)
    seconds = procedure.active_revision.estimated_fill_duration
    minutes = (seconds / 60.0).round
    [1, minutes].max
  end

  def admin_procedures_back_path(procedure)
    statut = if procedure.discarded?
      'supprimees'
    else
      case procedure.aasm_state
      when 'brouillon'
        'brouillons'
      when 'close', 'depubliee'
        'archivees'
      else
        'publiees'
      end
    end
    admin_procedures_path(statut:)
  end
end