import { FilterQuery } from 'mongoose';
import { PaginateOptions } from '@/shared/utils/plugins/paginate/paginate';
import { MasterBank } from './bank.model';
import { IMasterBankDoc } from './bank.interface';

function escapeRegex(str: string) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

export const queryMasterBanks = async (
  {
    search,
    ...rest
  }: {
    search?: string;
  } & Record<string, unknown>,
  options: PaginateOptions,
) => {
  const filter: FilterQuery<IMasterBankDoc> = {
    ...(rest as any),
    ...(search
      ? {
          nameLower: {
            $regex: escapeRegex(String(search).toLowerCase()),
          },
        }
      : {}),
  };

  return MasterBank.paginate(filter, {
    ...options,
    sortBy: options?.sortBy || 'name:asc',
    limit: options?.limit || 10,
    page: options?.page || 1,
    fields: options?.fields || 'name',
  });
};

export const getMasterBankById = async (id: string) => {
  return MasterBank.findById(id).select('name');
};
