/** Bits de permissão, espelhando App\Models\Permission na API. */
export const PERMISSION_BITS = Object.freeze({
  menu: 256,
  view: 1,
  add: 2,
  edit: 4,
  delete: 8,
});

/**
 * Níveis de permissão expostos na tela, na ordem em que aparecem.
 * `computed` marca o nível que não é editável à mão — ver applyComputedLevels.
 */
export const PERMISSION_LEVELS = Object.freeze([
  {
    key: "menu",
    label: "Menu",
    bit: PERMISSION_BITS.menu,
    computed: true,
    computedHint: "Ativado automaticamente por Visualizar.",
  },
  { key: "view", label: "Visualizar", bit: PERMISSION_BITS.view },
  { key: "add", label: "Cadastrar", bit: PERMISSION_BITS.add },
  { key: "edit", label: "Editar", bit: PERMISSION_BITS.edit },
  { key: "delete", label: "Excluir", bit: PERMISSION_BITS.delete },
]);

/**
 * Menu é derivado de Visualizar: quem enxerga a tela enxerga o menu, e quem
 * não enxerga não deve ter o item no menu levando a um 403.
 */
export const applyComputedLevels = (bits) =>
  bits & PERMISSION_BITS.view
    ? bits | PERMISSION_BITS.menu
    : bits & ~PERMISSION_BITS.menu;

/**
 * Menus da Franqueadora e o scope de permissão que governa cada fluxo.
 * A granularidade é o menu: quem tem o menu tem o fluxo inteiro por trás dele.
 *
 * Deve espelhar src/stores/navigation.js.
 */
export const FRANCHISOR_PERMISSION_MENUS = Object.freeze([
  { scope: "dashboard", label: "Dashboard", icon: "mdi-poll" },
  {
    scope: "franchisor_franchisee",
    label: "Franqueados",
    icon: "mdi-home-variant-outline",
  },
  {
    scope: "franchisor_packages",
    label: "Pacotes",
    icon: "mdi-package-variant-closed",
  },
  { scope: "franchisor_products", label: "Produtos", icon: "mdi-cart-outline" },
  { scope: "franchisor_tbr", label: "TBR", icon: "mdi-database-outline" },
  {
    scope: "franchisor_financial",
    label: "Financeiro",
    icon: "mdi-cash-multiple",
  },
  { scope: "franchisor_support", label: "Suporte", icon: "mdi-headset" },
  { scope: "franchisor_activities", label: "Atividades", icon: "mdi-clipboard-list-outline" },
  { scope: "franchisor_registrations", label: "Cadastros", icon: "mdi-account-multiple-outline" },
]);
