/**
 * Selector de identidades para los ajustes.
 *
 * Vive aparte de settings_view.js para que las reescrituras de upstream sobre ese
 * fichero no arrastren esto: alli solo hay una linea que llama a renderIdentities().
 *
 * No cambia de identidad en caliente. Anota cual sera la del proximo arranque y lo
 * dice; el porque esta en src/backend/accounts.js.
 */

module.exports = ({ i18n, html }) => {
  const { form, button, div, h2, p, section, input, span, ul, li, a } = html;
  const accounts = require('../../backend/accounts.js');

  const renderIdentities = (activeAccount) => {
    const names = accounts.list();
    const feeds = new Map(names.map((n) => [n, accounts.feedIdOf(n)]));

    // dos carpetas con el mismo feed son la misma identidad copiada: publicar desde
    // las dos parte el registro y no tiene arreglo, asi que se avisa en la lista
    const seen = new Map();
    for (const [n, id] of feeds) {
      if (!id) continue;
      seen.set(id, (seen.get(id) || 0) + 1);
    }

    const row = (name) => {
      const id = feeds.get(name);
      const isActive = name === activeAccount;
      const duplicated = id && seen.get(id) > 1;
      return li({ class: "identity-row" },
        div({ class: "identity-info" },
          span({ class: "identity-name" }, name),
          span({ class: "identity-feed" }, id ? `${id.slice(0, 18)}…` : "—"),
          duplicated ? span({ class: "identity-warn" }, i18n.identitiesSameFeed) : null
        ),
        isActive
          ? span({ class: "identity-active" }, i18n.identitiesActive)
          : form({ method: "POST", action: "/settings/identity/use" },
              input({ type: "hidden", name: "account", value: name }),
              button({ type: "submit" }, i18n.identitiesUse)
            )
      );
    };

    return section(
      div({ class: "tags-header" },
        h2(i18n.identitiesTitle),
        p(i18n.identitiesDescription),
        ul({ class: "identity-list" }, names.map(row)),
        form({ method: "POST", action: "/settings/identity/create" },
          input({ type: "text", name: "account", placeholder: i18n.identitiesNewName,
                  maxlength: "32", autocomplete: "off" }),
          button({ type: "submit" }, i18n.identitiesCreate)
        ),
        // sacar o meter una identidad ya existente es cosa del modulo legacy, que
        // es el que sabe cifrar el secret con una contraseña
        p(a({ href: "/legacy", class: "identity-legacy" }, i18n.identitiesBackup))
      )
    );
  };

  return { renderIdentities };
};
