/*
 * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <hello@stalw.art>
 *
 * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
 */

import { create } from 'zustand';

type Edition = 'enterprise' | 'community' | 'oss';

interface AccountState {
  permissions: string[];
  edition: Edition;
  locale: string;

  setAccountInfo: (permissions: string[], edition: Edition, locale: string) => void;
  hasPermission: (perm: string) => boolean;
  hasObjectPermission: (prefix: string, action: 'Get' | 'Query' | 'Create' | 'Update' | 'Destroy') => boolean;
}

export const useAccountStore = create<AccountState>()((set, get) => ({
  permissions: [],
  edition: 'community',
  locale: 'en',

  setAccountInfo: (permissions, edition, locale) => {
    set({ permissions, edition, locale });
  },

  hasPermission: (perm) => {
    return get().permissions.includes(perm);
  },

  hasObjectPermission: (prefix, action) => {
    return get().permissions.includes(`${prefix}${action}`);
  },
}));
