// Copyright 2017-2026 @pezkuwi/react-hooks authors & contributors
// SPDX-License-Identifier: Apache-2.0

import type { CollectiveType } from './types.js';

import { useMemo } from 'react';

import { useApi } from '@pezkuwi/react-hooks';
import { isFunction } from '@pezkuwi/util';

import { createNamedHook } from './createNamedHook.js';

function useCollectiveInstanceImpl (instanceType: CollectiveType, instanceIndex?: number): CollectiveType | null {
  const { api } = useApi();

  return useMemo(
    (): CollectiveType | null => {
      const index = instanceIndex || 0;
      const instances = api.registry.getModuleInstances(api.runtimeVersion.specName.toString(), instanceType);
      const instance = instances && (index < instances.length)
        ? instances[index] as 'council'
        : instanceType;

      return api.tx[instance] && isFunction(api.tx[instance].close)
        ? instance
        : null;
    },
    [api, instanceIndex, instanceType]
  );
}

export const useCollectiveInstance = createNamedHook('useCollectiveInstance', useCollectiveInstanceImpl);
