module EtablissementHelper
  def value_for_bilan_key(bilan, key)
    if bilan_v3?(bilan)
      return extract_resultat_exercice(bilan['data']) if key == "resultat_exercice"
      bilan["data"][key].presence || bilan["data"]["valeurs_calculees"][0][key].present? ? bilan["data"]["valeurs_calculees"][0][key]["valeur"] : nil
    else
      bilan[key]
    end
  end

  def year_for_bilan(bilan)
    if bilan_v3?(bilan)
      bilan["data"].fetch("annee")
    else
      bilan["date_arret_exercice"]
    end
  end

  # trouver la declaration 2051, et prendre la premiere valeur du bilan identifié par le code code_nref: 300476
  # autrement connu comme le resultat d'un exercice dans un bilan comptable "funky magic accountant lingo"
  def extract_resultat_exercice(bilan)
    declaration_2051 = bilan.dig('declarations').find { _1["numero_imprime"] == "2051" }
    return nil if declaration_2051.nil?

    total_general_data = declaration_2051.dig("donnees").find { _1["code_nref"] == "300476" }
    return nil if total_general_data.nil?

    total_general_data.dig("valeurs", 0)
  end

  def bilan_v3?(bilan)
    bilan&.key?("data")
  end

  def pretty_siret(siret)
    "#{siret[0..2]} #{siret[3..5]} #{siret[6..8]} #{siret[9..]}"
  end

  def pretty_currency(value, unit: '€')
    number_to_currency(value, locale: :fr, unit: unit, precision: 0)
  end

  def pretty_currency_unit(unit)
    dict = { 'kEuros' => 'k€', 'euros' => '€' }
    dict[unit]
  end

  def raison_sociale_or_name(etablissement)
    etablissement.association_titre.presence ||
      etablissement.enseigne.presence ||
      etablissement.entreprise_raison_sociale.presence ||
      "#{etablissement.entreprise_nom} #{etablissement.entreprise_prenom}"
  end

  def effectif(etablissement)
    {
      'NN' => "Unités non employeuses (pas de salarié au cours de l'année de référence et pas d’effectif au 31/12).",
      '00' => "0 salarié (n'ayant pas d’effectif au 31/12 mais ayant employé des salariés au cours de l'année de référence)",
      '01' => '1 ou 2 salariés',
      '02' => '3 à 5 salariés',
      '03' => '6 à 9 salariés',
      '11' => '10 à 19 salariés',
      '12' => '20 à 49 salariés',
      '21' => '50 à 99 salariés',
      '22' => '100 à 199 salariés',
      '31' => '200 à 249 salariés',
      '32' => '250 à 499 salariés',
      '41' => '500 à 999 salariés',
      '42' => '1 000 à 1 999 salariés',
      '51' => '2 000 à 4 999 salariés',
      '52' => '5 000 à 9 999 salariés',
      '53' => '10 000 salariés et plus'
    }[etablissement.entreprise_code_effectif_entreprise]
  end

  def pretty_date_exercice(date)
    date.sub(/(?<year>\d{4})(?<month>\d{2})/, '\k<year>') if date.present?
  end

  def humanized_entreprise_etat_administratif(etablissement)
    case etablissement.entreprise_etat_administratif&.to_sym
    when :actif
      "en activité"
    when :fermé
      "fermé"
    end
  end

  def entreprise_etat_administratif_badge_class(etablissement)
    case etablissement.entreprise_etat_administratif&.to_sym
    when :actif
      "fr-badge--success"
    when :fermé
      "fr-badge--error"
    end
  end
end