import { DatabaseError } from "@/lib/error";
import { logError } from "@/lib/logger";
import type { RepositoryContext } from "../datastore/repository";
import { BaseRepository } from "../datastore/repository";

export const MembershipRepository = (ctx: RepositoryContext) => {
  const repo = new BaseRepository(ctx);
  const FindAllEntries = async () => {
    try {
      const result = await repo.datastore
        .selectFrom("member_account_types")
        .selectAll()
        .execute();
      return result;
    } catch (err) {
      logError(err);
      return [];
    }
  };

  const FindByExtID = async (id: string) => {
    try {
      const result = await repo.datastore
        .selectFrom("member_account_types")
        .selectAll()
        .where("member_account_types.ext_account_type_id", "=", id)
        .executeTakeFirstOrThrow();
      return result;
    } catch (err) {
      logError(err);
      throw new DatabaseError({ error: err, message: "Failed to find record" });
    }
  };

  return { FindAllEntries, FindByExtID };
};

export type TMembershipRepository = ReturnType<typeof MembershipRepository>;
